Skip to content

App status

Every app has a status that controls whether the API accepts new activations and revalidations. The status is shown as a badge on the app card and in the Stripe sidebar.

Normal operation. The app accepts activations, validations, and deactivations. This is the default when you create an app.

Stripe test credentials have been saved against this app. The API behaves identically to Active — activate and validate work normally. Only the Stripe-facing side (webhook verification and checkout session creation) is routed through the test credentials.

See Test mode for how to enable and exit this state.

The app has been disabled, typically because a plan downgrade reduced your app limit below the number of apps you had.

When an app is deactivated:

  • New activations are blocked immediately. /activate returns 403 with the message “This product is no longer available on your developer’s plan”.
  • Existing licenses get a 30-day grace period. /validate continues to issue leases until 30 days after the deactivation date. After that, validation also returns 403. This gives your existing users time to find out and contact you before they’re locked out.
  • Deactivation is recorded in the app config. The deactivatedAt timestamp is used to calculate the grace period end.

Deactivation is triggered automatically by Keylight when your plan’s app limit is lower than your current app count — for example, if you downgrade from a plan that allows three apps to one that allows one.

When this happens, you’ll see a Select your active app prompt the next time you log in. Pick the app to keep; all others are set to Deactivated.

You can re-activate an app by upgrading to a plan that supports more apps. Contact support to reactivate a specific app after an upgrade.

  • Test mode — enter and exit Stripe test mode per app.
  • Billing & plans — plan limits that determine how many active apps you can have.
  • License lifecycle — how the user-facing license state maps to activate and validate.