> ## Documentation Index
> Fetch the complete documentation index at: https://docs.suby.fi/llms.txt
> Use this file to discover all available pages before exploring further.

# Checkout

> The hosted checkout page Suby generates for every product.

Every product on Suby has a hosted checkout page. When a customer clicks your PayLink or is redirected via a Checkout Session, they land on this page to complete their payment.

<Frame>
  <img src="https://mintcdn.com/suby/763qk24TXoTgmPpN/images/newcheckout.png?fit=max&auto=format&n=763qk24TXoTgmPpN&q=85&s=10f4cbea254826c3433b2dcda3c5e7bc" alt="Newcheckout" width="2900" height="1644" data-path="images/newcheckout.png" />
</Frame>

## What the Checkout Includes

<CardGroup cols={2}>
  <Card title="Logo" icon="image">
    Upload a custom logo image to brand your checkout page.
  </Card>

  <Card title="Product Name & Description" icon="tag">
    Displayed prominently at the top. Supports plain text.
  </Card>

  <Card title="Payment Methods" icon="credit-card">
    Cards, Apple Pay, Google Pay, bank account, and stablecoins, displayed automatically based on what you have enabled.
  </Card>

  <Card title="Order Summary" icon="receipt">
    Price, applicable taxes calculated in real time based on the customer's location, and total before confirmation.
  </Card>
</CardGroup>

## Setting Up Your Checkout

<Steps>
  <Step title="Go to your product">
    Open the product in your dashboard and click **New product**.
  </Step>

  <Step title="Customize appearance">
    Upload a banner image and fill in your product name and description.
  </Step>

  <Step title="Save">
    Changes apply immediately to your live checkout.
  </Step>
</Steps>

## Expiring & Cancelling a Checkout

Checkouts created through the API can be given a lifetime and killed on demand:

* **`expiresAt`** — pass a future date on `POST /api/payment/create` or `POST /api/subscription/create` to set a hard deadline. Once it passes, the link stops loading and no payment attempt can revive it. On subscriptions it applies to the initial checkout only, renewals are unaffected.
* **`POST /api/payment/:paymentId/cancel`** — invalidates a checkout that has not settled yet. The payment becomes `CANCELED` (terminal) and a `CHECKOUT_CANCELED` webhook is sent.

Together they let you issue a replacement checkout (new price, new discount) without the risk of the superseded one being paid alongside it.

<Note>
  Cancel while the checkout is still `INITIATED` whenever you can. A card checkout already handed off to the payment provider (`PENDING`) keeps a live session upstream, if the buyer completes it after you cancel, Suby refuses to credit the payment and the charge has to be refunded on the provider side.
</Note>

## After Payment

Once a customer completes payment, they are shown a default Suby confirmation page with their order details.

<Note>
  Custom success pages are not supported at this time.
</Note>

<Card title="Full API Reference" icon="code" href="/v2/api-reference/introduction">
  Endpoints, parameters, and response objects for Checkout Sessions.
</Card>
