An example Node.js app that integrates Keygen with Stripe for accepting payments.
Switch branches/tags
Nothing to show
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
views show error for failed user creation Aug 1, 2018
.gitignore initial commit Sep 1, 2017
LICENSE add license Oct 29, 2017 add troubleshooting section Aug 1, 2018
index.js fix keygen user id reference Mar 20, 2018
package.json initial commit Sep 1, 2017
yarn.lock initial commit Sep 1, 2017

Example Keygen + Stripe integration

The following web app is written in Node.js and shows how to integrate Keygen and Stripe together using webhooks. Much more could be done to automate e.g. license revocation when a subscription is canceled, etc.

This example application is not 100% production-ready, but it should get you 90% of the way there. You may need to add additional logging, error handling, as well as listening for additional webhook events.

Running the app

First up, configure a few environment variables:

# Stripe publishable key

# Stripe secret key (don't share this!)

# The Stripe plan to subscribe new customers to

# Keygen product token (don't share this!)

# Your Keygen account ID

# The Keygen policy to use when creating licenses for new users
# after they successfully subscribe to a plan

You can either run each line above within your terminal session before starting the app, or you can add the above contents to your ~/.bashrc file and then run source ~/.bashrc after saving the file.

Next, install dependencies with yarn:


Then start the app:

yarn start

Configuring the webhooks

For local development, create an ngrok tunnel to your local development server:

ngrok http 8080

Next up, add the generated ngrok URL to your Stripe and Keygen accounts to listen for webhooks.

  1. Stripe: add https://{YOUR_NGROK_URL}/stripe-webhooks to
  2. Keygen: add https://{YOUR_NGROK_URL}/keygen-webhooks to

In a production environment, you would use your actual server info in place of the ngrok URLs above.

Testing the integration

Visit the following url: http://localhost:8080 and fill out the purchase form.

Common Issues

Incorrect ENV variables

In case of errors, please double check all of your environment variables. If one of the variables are incorrect, it may cause API authentication issues.

Protected account

Please note that this example requires that your Keygen account is set to unprotected, because this example handles user creation on the front-end. You can update this setting on your account's settings page. If you would prefer to keep your account protected, the logic for user creation would need to be moved to a server-side URL.

Other issues

Here's a few things to double check when a problem arises:

  1. Make sure you're using the correct account ID (find yours here)
  2. Make sure you're using a product token or admin token (the token should start with prod- or admi-)
  3. Make sure you're using the correct policy ID (it should be a UUID)
  4. Make sure that your Stripe environment variables are correct
  5. Make sure all dependencies have been installed via yarn install
  6. Make sure you have correctly configured webhooks for both Keygen and Stripe
  7. Make sure that the webhook URL is accessible from the public internet via ngrok


Reach out at if you have any questions or concerns!