Why use a checkout session?

With checkout sessions generated dynamically instead of just using a product payment link, you are able to pass a request_id to the session.

This allows you to track the payment status and the user that made the payment in your system in a more organized way, and gives you the flexibility to track that payment with any ID you choose instead of relying on Creem IDs.

Create a checkout session

You can create a checkout session with a product ID

You can find a product ID by going to the products tab and clicking on the product options and selecting “Copy ID”.

Additionally, you can pass a request_id to the session to track the payment in your system. You will also need the API key to authenticate the request.

The above request will return a checkout session object with a checkout_url that you can use to redirect the user to the payment page.

Any payments made with this checkout session will have the request_id you provided on the Redirect URL, as well as the webhook event.

Metadata

The request_id is only returned in the checkout.completed webhook (which is very useful for one-time payments), but it’s not sent with every new subscription transaction.

To make things easier, we also allow you to pass metadata in a checkoutSession with or without the request_id. This metadata will be saved in the Subscription object and returned with every subsequent webhook.

Success URL

You can pass a custom success_url for each checkout_session, which will override the success_url set on the product.

This allows you to dynamically redirect users to custom pages after each payment (useful for directing users to their specific account resources after payment).

Customer Email

You can pass a customer.email directly in the checkout session. This email will be pre-filled for the user on the checkout session page and cannot be changed.

This is useful if you want to ensure that the user completes the payment using the email they registered on your platform.