Skip to main content
Checkout sessions give you programmatic control over the payment flow. Unlike static payment links, checkout sessions are generated dynamically, allowing you to:
  • Pass custom tracking IDs for each payment
  • Pre-fill customer information like email
  • Set dynamic success URLs based on your app’s context
  • Apply discount codes programmatically
  • Add metadata for internal tracking

Prerequisites

Before creating checkout sessions, you’ll need:
  • A Creem account with an API key (Get your key)
  • At least one product created in your dashboard. One-time products can be paid or free with a 0 price.
Find your product ID by going to the Products tab, clicking on a product, and selecting “Copy ID” from the options menu.

Creating a Checkout Session

Choose the integration method that works best for your stack:
The Next.js adapter provides a route handler and React component for seamless integration.

Install the package

Create the checkout route

Add a checkout button

The CreemCheckout component automatically handles the checkout session creation and redirects the user to the payment page.

Next.js SDK Documentation

Explore advanced features, server components, and webhook handling.

Handling Successful Payments

After a successful payment, users are redirected to your success_url with payment details as query parameters:
For production applications, we recommend using Webhooks to handle payment events.

Verifying Redirect Signatures

The signature query parameter allows you to verify that the redirect came from Creem. This prevents malicious users from spoofing successful payment redirects.
The signature is a SHA-256 hex digest of the redirect parameters joined with |, with salt= {apiKey} appended at the end. Parameters appear in the order they arrive in the redirect URL (not alphabetically sorted), and null or empty values are excluded — only include parameters that have actual values.
The canonical string is built as:
Then hashed with SHA-256 and hex-encoded to produce the signature value.
Important: Parameters with null or empty values (like order_id for subscription-only checkouts, or subscription_id for one-time payments) must be excluded from the signed string. Including them as "order_id=null" will cause verification to fail.

Advanced Features

Metadata

Add custom metadata to track additional information with each payment. Metadata is included in webhook events and can be retrieved later.
Metadata is especially useful for tracking internal IDs, campaign sources, or any custom information you need to associate with a payment.

Custom Success URL

Override the default success URL on a per-checkout basis. This is useful for directing users to specific pages after payment based on context.

Pre-fill Customer Email

Lock the customer email at checkout to ensure users complete payment with the email they registered with on your platform.

Apply Discount Codes

Apply discount codes programmatically to pre-fill them at checkout.

Discount Codes

Learn how to create and manage discount codes in your dashboard.

Seat-Based Billing

Charge for multiple units or seats by specifying the units parameter. The total price will be calculated as base_price × units.

Seat-Based Billing

Learn more about implementing and managing seat-based pricing models.

Next Steps

Checkout Customization

Brand your checkout with custom colors, logos, and themes

Checkout Custom Fields

Collect additional information from customers during checkout

Subscriptions

Learn how to manage recurring billing and subscriptions

Revenue Splits

Split revenue between multiple parties automatically