Checkout extension points
Explore the available Checkout extension points to extend the UI of Checkout across all of its stages.
This feature is only available for stores using B2B Buyer Portal, which is currently available to selected accounts.
Checkout offers a variety of extension points across all of its stages, including cart, delivery, cart review, and order placed. These extension points allow you to extend the UX/UI of Checkout to meet your store's specific needs.
Before implementing extensions, make sure you have set up Buyer Portal Checkout.
Available extension points
The following table lists all available extension points, the Checkout stage where they render, and whether they may cause layout shift.
| Extension point | Stage | Description | Layout shift |
|---|---|---|---|
layout.footer | Global | Render content in the Checkout footer, available across all Checkout pages. | No |
cart.cart-list.before | Cart | Render content before the cart item list. | Yes ⚠️ |
cart.cart-list.after | Cart | Render content after the cart item list. | No |
cart.cart-item.after | Cart | Render content below each cart item row. | Yes ⚠️ |
cart.assembly-options.button.after | Cart | Render content after the assembly options button of a cart item. | Yes ⚠️ |
cart.order-summary.after | Cart | Render content below the order summary on the cart page. | Yes ⚠️ |
cart.order-button.after | Cart | Render content after the main order button on the cart page. | Yes ⚠️ |
punchout.cart-item.after | Cart Punchout | Render content below each cart item row on the Punchout cart screen. | Yes ⚠️ |
punchout.order-summary.cta | Cart Punchout | Render a primary action (call to action) in the Punchout order summary. | No |
delivery.cart-item.after | Delivery | Render content below each cart item row on the delivery stage. | Yes ⚠️ |
delivery.information-form.after | Delivery | Render content after the delivery information form. | Yes ⚠️ |
delivery.order-button.after | Delivery | Render content after the order button on the delivery stage. | Yes ⚠️ |
review.cart-item.after | Review | Render content below each cart item row on the review stage. | Yes ⚠️ |
payment.cart-item.after | Payment | Render content below each cart item row on the payment stage. | Yes ⚠️ |
payment.order-button.after | Payment | Render content after the order button on the payment stage. | Yes ⚠️ |
order-placed.cart-item.after | Order Placed | Render content below each cart item row on the order placed stage. | Yes ⚠️ |
Some extension points may cause layout shifts and are marked with
Yes ⚠️in the table above. If your extension relies on data fetching (for example, Fetch API calls), reserve space to handle dynamic content smoothly by using loading states and skeletons. Fully static extensions and extensions that rely solely on data-layer hooks (such asuseCart) shouldn't cause layout shifts, because Checkout always renders extensions seamlessly within the existing layout. Even so, implementing skeletons or loading states is recommended to improve the overall UX/UI.
Global extension points
These extension points are global and available across all Checkout pages, from the cart to the order placed stage.
layout.footer
Use this extension point to render content in the Checkout footer. Since it's global, the content is displayed consistently across all Checkout pages.

Cart extension points
Use the following extension points to customize different areas of the cart experience.
cart.cart-list.before
Render content before the cart item list, ideal for cart-level messaging that should appear above the items. Use the useCart hook to access and mutate cart data.

cart.cart-list.after
Render content after the cart item list and before the bottom of the cart page. Use the useCart hook to access and mutate cart data.

cart.cart-item.after
Render content immediately below each cart item row, allowing you to attach item-specific content such as warranties, services, or custom details for that product. Use the useCartItem hook to access data for the current item and the useCart hook to access and mutate cart data.

cart.assembly-options.button.after
Render content after the assembly options button of a cart item. Use the useCart hook to access and mutate cart data.

cart.order-summary.after
Append components under the order summary on the cart page, such as financing simulators, loyalty messages, or upsell suggestions.

cart.order-button.after
Render content after the main order button on the cart page.

Cart Punchout extension points
Use the following extension points to customize the Punchout cart screen.
punchout.cart-item.after
Render content below each cart item row on the Punchout cart screen, for example to add per-item options or attachments. Use the useCartPunchout and useCartItem hooks to read and update the cart.

punchout.order-summary.cta
Render a primary action button in the Punchout order summary sidebar, typically used to transfer the cart back to the eprocurement system. Use the useRedirect hook to redirect the user to a target URL.

Delivery extension points
Use the following extension points to customize the delivery stage.
delivery.cart-item.after
Render content below each cart item row on the delivery stage. Use the useCartItem hook to access data for the current item.

delivery.information-form.after
Render content after the delivery information form.

delivery.order-button.after
Render content after the order button on the delivery stage.

Review extension points
Use the following extension point to customize the review stage.
review.cart-item.after
Render content below each cart item row on the review stage. Use the useCartItem hook to access data for the current item.

Payment extension points
Use the following extension points to customize the payment stage.
payment.cart-item.after
Render content below each cart item row on the payment stage. Use the useCartItem hook to access data for the current item.

payment.order-button.after
Render content after the order button on the payment stage.

Order Placed extension points
Use the following extension point to customize the order placed stage.
order-placed.cart-item.after
Render content below each cart item row on the order placed stage. Use the useCartItem hook to access data for the current item.

Displaying extension points in dev mode
You can view all available extension points directly in the Checkout UI. To do this, run Checkout using the Checkout CLI with the --show-placeholders flag (see the Checkout CLI documentation for more information):
_10yarn checkout dev <account> <project-path> <port> --show-placeholders
The --show-placeholders flag tells Checkout to display placeholders where extension points are located.