Licenzy uses your stored Stripe connection
Your app does not call stripe.checkout.sessions.create directly in the Licenzy integration flow. Instead, your backend calls Licenzy runtime APIs and Licenzy uses the Stripe credentials stored in the portal.
Licenzy sits on top of Stripe for checkout, entitlement state, access checks, and usage consumption. Stripe still collects payment. Licenzy uses the saved connection to create Stripe Checkout internally when your backend calls POST /v1/checkout/session.
Keep test and live separate
- Test Stripe keys and the test Stripe inbound webhook secret belong to test mode only.
- Live Stripe keys and the live Stripe inbound webhook secret belong to live mode only.
- Price IDs must match the same mode as the product and API key.
Setup sequence
A reliable setup keeps credentials, products, price IDs, and runtime keys aligned in the same environment before the first checkout request is sent.
- Connect Stripe credentials and the Stripe inbound webhook signing secret in test mode first.
- Configure Stripe's tenant webhook destination and required events in the Stripe Dashboard for that same mode.
- Create or verify the matching Licenzy products for the Stripe price IDs you plan to sell.
- Create a test Licenzy API key and store it only in backend secrets.
- Call checkout from your backend using a product code from the same mode.
- Repeat the setup with live Stripe credentials, live products, and a live API key only when you are ready to follow the go live checklist.
What Licenzy validates during setup
Stripe setup is validated against Stripe before runtime checkout can be trusted. Treat these checks as part of the required setup contract, not as optional safety rails.
- Stripe API keys are validated directly against Stripe.
- Test Stripe credentials are rejected for live mode, and live credentials are rejected for test mode.
- Inactive Stripe Prices are rejected for Licenzy product mapping.
subscriptionproducts require a recurring Stripe Price.time_passandusage_packproducts require a one-time Stripe Price.
Tenant webhook setup belongs to setup, not runtime
The Stripe inbound webhook is part of setup. Register Licenzy as the destination in the Stripe Dashboard for each mode you operate, and keep that event subscription aligned with the same Stripe connection, products, and API keys used by your runtime flow.
Use tenant webhook setup for the required event list and setup boundary.
Common setup mistakes
- Using a live Licenzy API key with a test Stripe price ID.
- Creating a product in one mode and trying to buy it from the other mode.
- Saving Stripe credentials without the matching Stripe inbound webhook secret for that mode.
- Assuming the Licenzy portal registers the Stripe tenant webhook destination or required events for you.
- Passing a Stripe price ID directly to runtime checkout instead of a Licenzy product code.
- Calling Stripe Checkout directly and expecting Licenzy entitlement state to update from that separate flow.