Billing

Connect Stripe to Licenzy for checkout

Store Stripe credentials and the Stripe inbound webhook signing secret in Licenzy, then configure the tenant webhook destination in Stripe so checkout can update entitlement state.

Start free in test mode. Go live when you're ready.

Category: Setup7 sections

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.
Mode alignment
A product mapped to a test Stripe price cannot be used correctly with a live API key, and vice versa. Product catalog, Stripe connection and API key must all point at the same environment.

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.

  1. Connect Stripe credentials and the Stripe inbound webhook signing secret in test mode first.
  2. Configure Stripe's tenant webhook destination and required events in the Stripe Dashboard for that same mode.
  3. Create or verify the matching Licenzy products for the Stripe price IDs you plan to sell.
  4. Create a test Licenzy API key and store it only in backend secrets.
  5. Call checkout from your backend using a product code from the same mode.
  6. 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.
  • subscription products require a recurring Stripe Price.
  • time_pass and usage_pack products require a one-time Stripe Price.
Practical validation path
After saving Stripe credentials, validate one product mapping in the same mode before trying checkout. If product creation fails, fix the Stripe Price configuration first instead of debugging runtime request bodies.

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.

Webhook scope
Licenzy stores the Stripe inbound webhook signing secret in the portal, but Stripe itself owns the destination and event registration. Your application should not proxy or replay these inbound Stripe events.

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.
Check the mode first
When checkout or access behaves unexpectedly, verify the API key, Stripe connection, product catalog, and price ID all belong to the same test or live mode before debugging request payloads.