# Introduction to Checkout commercetools [Checkout](/checkout/overview.md) is a pre-built checkout solution that handles the payment and order completion flow for commercetools. Checkout provides a pre-built UI and backend logic that integrates with Payment Service Providers (PSPs) through Connect and manages Cart-to-Order conversion. ## Checkout features Checkout provides out-of-the-box PSP integration through Connect, a hosted checkout UI via the Browser SDK, built-in PCI DSS compliance, multi-region support, localization, and event messaging. These capabilities reduce the time required to implement payment processing by providing the infrastructure, PSP integrations, and UI components needed for a complete checkout flow. For details on each feature, see [Checkout overview](/checkout/overview.md#features). ## Checkout modes: Complete Checkout and Payment Only Checkout operates in two modes. [Complete Checkout mode](/checkout/overview.md#complete-checkout-mode) delegates the entire checkout UI and flow to Checkout, including address forms, shipping method selection, payment processing, and order summary. [Payment Only mode](/checkout/overview.md#payment-only-mode) handles only payment processing. You manage the rest of the checkout flow yourself, and the Cart must have shipping and billing information before initializing payment. For a full description of each mode, see [Complete Checkout and Payment Only modes](/checkout/overview.md#complete-checkout-and-payment-only-modes). ## Checkout architecture Checkout contains several components that work together to process payments and manage the checkout flow: the Checkout Application (backend service), Connectors (PSP integrations), Merchant Center configuration, and the Browser SDK (frontend integration). For a detailed description of each component and how the components interact, see [Checkout architecture](/checkout/overview.md#checkout-architecture). ## Checkout Sessions Checkout Sessions authorize and configure individual checkout instances. You can create Sessions from your Backend for Frontend (BFF) by calling the Sessions API. A Session request requires the following: - An API Client access token with the `manage_sessions` [scope](/checkout/hosts-and-authorization.md#authorization) - The Cart `id` or `key` - The Checkout Application `id` or `key` The Sessions API returns a `sessionId` value, which you can provide to the Browser SDK when initializing the checkout flow. ```typescript title="Create a Checkout Session from your BFF" import fetch from "node-fetch"; async function createCheckoutSession( region: string, projectKey: string, token: string, cartId: string, applicationKey: string ) { const url = `https://session.${region}.commercetools.com/${projectKey}/sessions`; const body = { cart: { cartRef: { id: cartId, }, }, metadata: { applicationKey: applicationKey, }, }; const response = await fetch(url, { method: "POST", headers: { "Authorization": `Bearer ${token}`, "Content-Type": "application/json", }, body: JSON.stringify(body), }); if (!response.ok) { throw new Error(`Session creation failed: ${response.status}`); } const data = await response.json(); return data.id; // This is the sessionId } ``` ## Checkout workflows The following sections describe the typical integration flows for Complete Checkout and Payment Only modes. ### Complete Checkout workflow Before initializing the Complete Checkout mode, you must make sure that a Cart exists in commercetools (either an anonymous Cart or a Customer Cart). Checkout doesn't create Carts. For more information about how to prepare a Cart, see [Cart preparation and review](/learning-implement-checkout/custom-checkout/cart-preparation-and-review.md). The following diagram shows the Complete Checkout initialization flow: ```mermaid sequenceDiagram participant Browser participant BFF participant Session API participant Checkout API Browser->>BFF: Request Checkout page BFF->>Session API: Create Session Session API-->>BFF: Return [sessionId] BFF-->>Browser: Return [sessionId] Browser->>Checkout API: Initialize CheckoutFlow using Checkout SDK with [sessionId] Checkout API-->>Browser: Return Checkout configuration and Cart Browser->>Browser: Checkout ``` This sequence performs the following actions: 1. Initializes the Checkout Session 2. Associates a Customer Cart to it 3. Specifies which Application to use for the checkout. This step, in turn, specifies the customization and localization settings that are to be used during checkout. 4. Renders the Checkout UI directly in the browser. By default, the Checkout UI is rendered in full screen in an absolute positioned `