Skip to main content

Bonsai Checkout

This document explains how to use the Bonsai Checkout, and guides you through the process of integrating it with your website.

Integrations

There are 2 ways to integrate with Bonsai Checkout:

  1. Embedded - embedding the Bonsai Checkout in your website
  2. Hosted - redirecting to a secure Bonsai Checkout URL

Based on your preferred experience, choose the one that fits your needs.

Embedded​

This integration enables you to run the checkout process on your domain.

You can obtain the order information after a successful checkout through callbacks, explained in the following sections.

Query parameters​

Checkout app reads the following query parameters from the URL:

NameValueDescriptionRequired
bonsaicheckout_IDStarts checkout process using provided cart IDYes

bonsai parameter is the only required parameter, and it should be provided with a cart id that you want to check out.

Callbacks​

Callbacks are optional, and you can use them to obtain order information after a successful checkout. These functions must be provided to the init function (further details in step 3 section).

Example
function handleOrder (order) {
// do something with the order
};

bonsai.init({
// ...
bonsaiEvents: {
version: 'v1',
onBonsaiEvent: ({ tag, event, data }) => {
switch (tag) {
case 'order_completed':
handleOrder(event);
break;
case 'product_unavailable':
console.log('Product unavailable', data);
break;
}
},
},
// ...
});

Step 1: Create a page​

You will need to create a page on your website that will host the Bonsai Checkout, e.g. https://your.domain.com/checkout. We will refer to this page as the Checkout page.

Step 2: Add Bonsai Checkout dependencies​

Add the Bonsai Checkout dependencies to Checkout page:

checkout.html
<head>
<!-- Bonsai Checkout CSS -->
<link rel="stylesheet" href="https://ui.getbonsai.com/index.css" />
</head>

<body>
<!-- Bonsai Checkout JS -->
<script type="text/javascript" src="https://ui.getbonsai.com/index.js"></script>
</body>

Step 3: Configure Bonsai Checkout​

checkout.html
<!-- as defined in the previous step -->
<!-- <script type="text/javascript" src="https://ui.getbonsai.com/index.js"></script> -->
<script type="text/javascript">
// Extract bonsai object from window
var bonsai = window.__BONSAI__;

function customOrderSuccessMessage({ email }) {
return `Thank you! You will receive a confirmation email with your order details shortly. Your account has been created using ${email}.`;
}

// Initialize bonsai with configuration options
bonsai.init({
accountId: '<API_KEY_VALUE>',
customInfoMessage: 'Custom message displayed on the cart page',
bonsaiEvents: {
version: 'v1',
onBonsaiEvent: ({ tag, event, data }) => {
switch (tag) {
case 'order_completed':
console.log('Order completed', event);
break;
case 'product_unavailable':
console.log('Product unavailable', data);
break;
// ...
}
},
},
customOrderSuccessMessage,
});
</script>
info

For more details on bonsaiEvents please refer to the Events page.

Checkout types​

Bonsai Checkout supports 2 checkout types: Single product and Multi product. You can set it using the checkoutType (further details in step 3 section).

Single product​

Bonsai UI can run in single product mode, which means that it will display a single product with no cart support. productId and variantId are required for this mode, and the application will automatically create a cart for you, containing the provided product. This cartId will be re-used for future checkouts, until the cart is deleted after successful checkout.

Multi product​

Multi product mode is the default mode, and it supports multiple products and variants. It requires a cart ID, which you need to create using the Bonsai Carts API.

Configuration options​

type Config = {
/* REQUIRED: */

/* Authenticates your account with Bonsai services */
accountId: string;

/* The type of checkout.
*
* - `single-product` - checkout for a single product with no cart support
* - `productId` - product ID
* - `variantId` - variant ID
*
* - `multi-product` - checkout for multiple products, using regular cart
* - `cartId` - cart ID
*/
checkoutType: 'single-product' | 'multi-product';

/* single-product checkout options */
productId: string;
variantId: string;

/* multi-product checkout options */
cartId: string;

/* OPTIONAL */

/* Deprecated: Instead, please use onBonsaiEvent with "order_completed" tag. */
onSuccess?: (order: Order) => void;
/* Deprecated: Instead, please use onBonsaiEvent with "shipping_info_entered" tag. */
onShippingSubmit?: (context: ShippingContext) => void;

/* A callback that will be invoked when user submits payment information */
bonsaiEvents?: {
/* A version of the Bonsai events. This allows us to make breaking changes
* to the events without breaking your integration. */
version: 'v1';
/* A callback that will be invoked when a Bonsai event has been emitted. */
onBonsaiEvent: (event: BonsaiEvent) => void; // More details in "Events" page
};

/* A color for the button fill */
buttonBackground?: string;
/* A color for the button font color */
buttonTextColor?: string;
/* A custom google font override */
font?: string;
/* A custom message displayed on the cart page */
customInfoMessage?: string;
/* A custom message displayed on the order success page. `ShippingContext` data is provided as an argument
* to the function, so you can get access to the ShippingContext information. If `null` is returned, the
* default message will be displayed.
*/
customOrderSuccessMessage?: (context: ShippingContext) => string | null;
/* A custom link displayed on the order success page. If not provided, the link will not be displayed.
* Requires an `href` value. If `text` not provided, the link will use a default text instead ("Go back").
*/
customOrderSuccessLink?: { href: string; text?: string };
/* If provided, the checkout header image will link to the provided URL */
originUrl?: string;
/* ID of the order provided to Bonsai by the party who placed the order - should be unique per order if passed. */
externalOrderId?: string;
/*
* An array of allowed countries for checkout. If provided, the shipping form will be restricted to
* these countries. Otherwise defaults to our supported countries.
* Use ISO 3166-1 alpha-2 country codes (e.g., 'US' for United States, 'CA' for Canada).
*/
allowedCountries?: ('CA' | 'US' | 'GB')[];
};

type ShippingContext = {
cartId: string;
shipping: {
address: {
address1: string;
address2?: string;
city: string;
country: string;
firstName: string;
lastName: string;
zip: string;
};
email: string;
phone: string;
};
};

Script data attributes​

Data attributeValueDescriptionRequired
srchttps://ui.getbonsai.com/index.js or https://staging-ui.getbonsai.com/index.jsBonsai Checkout Javascript URL✅

Step 4: Create cart​

In order to start the checkout process, you need to create a cart first. You can do this by using Bonsai Carts API

curl -L -X POST 'https://api.shopbonsai.ca/carts/v1/submit' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'API-Key: <API_KEY_VALUE>' \
--data-raw '{
"products": [
{
"id": "clad6pg5z00eu012gfz7hfm92",
"variantId": "M00679529706740",
"quantity": 1
}
]
}'

# result:
# {"data":{"id":"RANDOM_CART_ID"}}
info

You can find more information about how to create and update carts using the Bonsai Carts API here.

Step 5: Redirect to checkout​

After you have created a cart, and obtained a cart id, you can redirect the user to the Checkout page.

You will need to add a bonsai query parameter to the Checkout page URL, with the cart id as its value.

Hosted​

Coming soon...

Changelog​

  • November 21, 2023
    • Addition of ApplePay/GooglePay events
    • Events extracted to separate page
  • November 14, 2023
    • Additional BonsaiEvent types
  • November 6, 2023
    • Added province to shipping_info_entered BonsaiEvent.
  • October 26, 2023
    • Additional fields added to all BonsaiEvent types.
    • onShippingSubmit and onSuccess callbacks are deprecated.
    • bonsaiEvents supports the same functionality, and should be used instead.