Documentation
Feedback
Guides
API Reference

Guides
Guides

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 pointStageDescriptionLayout shift
layout.footerGlobalRender content in the Checkout footer, available across all Checkout pages.No
cart.cart-list.beforeCartRender content before the cart item list.Yes ⚠️
cart.cart-list.afterCartRender content after the cart item list.No
cart.cart-item.afterCartRender content below each cart item row.Yes ⚠️
cart.assembly-options.button.afterCartRender content after the assembly options button of a cart item.Yes ⚠️
cart.order-summary.afterCartRender content below the order summary on the cart page.Yes ⚠️
cart.order-button.afterCartRender content after the main order button on the cart page.Yes ⚠️
punchout.cart-item.afterCart PunchoutRender content below each cart item row on the Punchout cart screen.Yes ⚠️
punchout.order-summary.ctaCart PunchoutRender a primary action (call to action) in the Punchout order summary.No
delivery.cart-item.afterDeliveryRender content below each cart item row on the delivery stage.Yes ⚠️
delivery.information-form.afterDeliveryRender content after the delivery information form.Yes ⚠️
delivery.order-button.afterDeliveryRender content after the order button on the delivery stage.Yes ⚠️
review.cart-item.afterReviewRender content below each cart item row on the review stage.Yes ⚠️
payment.cart-item.afterPaymentRender content below each cart item row on the payment stage.Yes ⚠️
payment.order-button.afterPaymentRender content after the order button on the payment stage.Yes ⚠️
order-placed.cart-item.afterOrder PlacedRender 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 as useCart) 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.

{"base64":"  ","img":{"width":1440,"height":359,"type":"webp","mime":"image/webp","wUnits":"px","hUnits":"px","length":11362,"url":"https://cdn.jsdelivr.net/gh/vtexdocs/dev-portal-content@main/docs/guides/Checkout/checkout-extensibility/layout.footer.webp"}}

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.

{"base64":"  ","img":{"width":1564,"height":575,"type":"webp","mime":"image/webp","wUnits":"px","hUnits":"px","length":28566,"url":"https://cdn.jsdelivr.net/gh/vtexdocs/dev-portal-content@main/docs/guides/Checkout/checkout-extensibility/cart.cart-list.before.webp"}}

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.

{"base64":"  ","img":{"width":1920,"height":1002,"type":"webp","mime":"image/webp","wUnits":"px","hUnits":"px","length":27902,"url":"https://cdn.jsdelivr.net/gh/vtexdocs/dev-portal-content@main/images/cart.cart-list.after.webp"}}

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.

{"base64":"  ","img":{"width":1920,"height":1001,"type":"webp","mime":"image/webp","wUnits":"px","hUnits":"px","length":31040,"url":"https://cdn.jsdelivr.net/gh/vtexdocs/dev-portal-content@main/images/cart.cart-item.after.webp"}}

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.

{"base64":"  ","img":{"width":1370,"height":612,"type":"webp","mime":"image/webp","wUnits":"px","hUnits":"px","length":17878,"url":"https://cdn.jsdelivr.net/gh/vtexdocs/dev-portal-content@main/docs/guides/Checkout/checkout-extensibility/cart.assembly-options.button.after.webp"}}

cart.order-summary.after

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

{"base64":"  ","img":{"width":1920,"height":1001,"type":"webp","mime":"image/webp","wUnits":"px","hUnits":"px","length":27996,"url":"https://cdn.jsdelivr.net/gh/vtexdocs/dev-portal-content@main/images/cart.order-summary.after.webp"}}

cart.order-button.after

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

{"base64":"  ","img":{"width":1675,"height":376,"type":"webp","mime":"image/webp","wUnits":"px","hUnits":"px","length":10284,"url":"https://cdn.jsdelivr.net/gh/vtexdocs/dev-portal-content@main/docs/guides/Checkout/checkout-extensibility/cart.order-button.after.webp"}}

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.

{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAACCAIAAADwyuo0AAAACXBIWXMAAAPoAAAD6AG1e1JrAAAAI0lEQVR4nGPIycreuWmLjZV1UVERw4tnz188e15VWSkrLgkApmwMixLsSEoAAAAASUVORK5CYII=","img":{"src":"https://cdn.jsdelivr.net/gh/vtexdocs/dev-portal-content@main/docs/guides/Checkout/checkout-extensibility/punchout.cart-item.after.webp","width":1371,"height":568,"type":"webp"}}

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.

{"base64":"  ","img":{"width":1371,"height":568,"type":"webp","mime":"image/webp","wUnits":"px","hUnits":"px","length":10384,"url":"https://cdn.jsdelivr.net/gh/vtexdocs/dev-portal-content@main/docs/guides/Checkout/checkout-extensibility/punchout.order-summary.cta.webp"}}

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.

{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABCAIAAAB2XpiaAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAAFUlEQVR4nGPYvm3769evkxKSFGRkATQKBmMhD3tuAAAAAElFTkSuQmCC","img":{"src":"https://cdn.jsdelivr.net/gh/vtexdocs/dev-portal-content@main/docs/guides/Checkout/checkout-extensibility/delivery.cart-item.after.webp","width":1440,"height":341,"type":"webp"}}

delivery.information-form.after

Render content after the delivery information form.

{"base64":"  ","img":{"width":1577,"height":381,"type":"webp","mime":"image/webp","wUnits":"px","hUnits":"px","length":9458,"url":"https://cdn.jsdelivr.net/gh/vtexdocs/dev-portal-content@main/docs/guides/Checkout/checkout-extensibility/delivery.information-form.after.webp"}}

delivery.order-button.after

Render content after the order button on the delivery stage.

{"base64":"  ","img":{"width":1675,"height":515,"type":"webp","mime":"image/webp","wUnits":"px","hUnits":"px","length":13620,"url":"https://cdn.jsdelivr.net/gh/vtexdocs/dev-portal-content@main/docs/guides/Checkout/checkout-extensibility/delivery.order-button.after.webp"}}

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.

{"base64":"  ","img":{"width":1439,"height":341,"type":"webp","mime":"image/webp","wUnits":"px","hUnits":"px","length":6802,"url":"https://cdn.jsdelivr.net/gh/vtexdocs/dev-portal-content@main/docs/guides/Checkout/checkout-extensibility/review.cart-item.after.webp"}}

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.

{"base64":"  ","img":{"width":1440,"height":286,"type":"webp","mime":"image/webp","wUnits":"px","hUnits":"px","length":6536,"url":"https://cdn.jsdelivr.net/gh/vtexdocs/dev-portal-content@main/docs/guides/Checkout/checkout-extensibility/payment.cart-item.after.webp"}}

payment.order-button.after

Render content after the order button on the payment stage.

{"base64":"  ","img":{"width":1675,"height":496,"type":"webp","mime":"image/webp","wUnits":"px","hUnits":"px","length":10512,"url":"https://cdn.jsdelivr.net/gh/vtexdocs/dev-portal-content@main/docs/guides/Checkout/checkout-extensibility/payment.order-button.after.webp"}}

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.

{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAACCAIAAADwyuo0AAAACXBIWXMAAAPoAAAD6AG1e1JrAAAAI0lEQVR4nGOY2D9BX19/3759////Z9i3b5+KgpKFkcm9e/cArRENTb7C4ecAAAAASUVORK5CYII=","img":{"src":"https://cdn.jsdelivr.net/gh/vtexdocs/dev-portal-content@main/docs/guides/Checkout/checkout-extensibility/order-placed.cart-item.after.webp","width":1440,"height":562,"type":"webp"}}

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):


_10
yarn checkout dev <account> <project-path> <port> --show-placeholders

The --show-placeholders flag tells Checkout to display placeholders where extension points are located.

Contributors
1
Photo of the contributor
Was this helpful?
Yes
No
Suggest Edits (GitHub)
Contributors
1
Photo of the contributor
Was this helpful?
Suggest edits (GitHub)
On this page