Software Licensing


Software Licensing for Easy Digital Downloads provides a complete license key generation, activation, and checking system. It allows you to provide license keys along with your digital products that can then be used to properly license and activate the buyer’s copy of the software. Whether you are selling WordPress plugins, themes, or any other kind of software, including video games and desktop applications, the Software Licensing add-on will become a huge asset for you that also helps to take your business to the next level.

The licensing admin

The licensing admin

With a complete API that can be used for activating, checking, and validating license keys, this is the perfect addition to any digital store selling software, whether that software is WordPress plugins or themes, video games, applications, or any other kind of software.

Video Tour

For WordPress and Non-WordPress Products

The add-on has been built specifically with WordPress theme and plugin developers in mind, but can be used for any kind of software licensing through the included API. Included with the add-on are complete samples that illustrate how to implement license activation and checking in your theme or plugin, and how to setup automatic upgrades for your theme or plugin that are delivered through the licensing system.

Complete documentation for both WordPress and non-WordPress implementations are available. View documentation.

License key generation can be enabled on a per-product basis, giving you the full ability to sell and track license keys for some products, but not all.

Key Features

  • License key generation
  • Remote license activation
  • Remote license deactivation
  • Remote license checking
  • Ability to manually add / remove sites
  • Simple setup
  • Complete API for custom solutions
  • Automatic upgrade system for WP plugins and themes
  • Limit number of activations
  • License activation logs
  • Automatic license expiration
  • Automatic license renewal reminders
  • Integration with Recurring Payments for automatic license renewals
  • Extensive documentation

Add Automatic Upgrades to Your WordPress Products

With the complete API for providing automatic upgrades for WordPress plugins and themes to valid license key holders, this add-on will not only make your life as a distributor of products easier, but it will also thrill your customers by allowing them to upgrade their themes and plugins to the latest version with only one click.

The automatic upgrade system included with the add-on for both themes and plugins follows all of the core WordPress UI standards, so users won’t even know the difference.

Implementing the automatic upgrades into your theme or plugin is a easy as including a couple lines of code (all provided) in your theme or plugin files.

Includes Complete License Renewal System

Software Licensing includes a complete renewal system to allow customers to renew their license keys when they are nearing expiration. Included with the renewal system is an automated email that can be sent to customers when a license is about to expire, and from the email customers can, with a single click, go directly to your store and renew their license key. There are also options to manually renew licenses and also manually send renewal notices. Also included with the renewal system is a complete reporting view that shows a graph of license renewals and earnings from those renewals over time.




Version 3.2.1, March 26, 2015

  • Fixed a bug that could cause license keys to be improperly marked as expired

Version 3.2, March 25, 2015

  • Added new bundle licensing options. See announcement post for details
  • Incorrect field labels in renewal notice settings
  • Improved CSS / JS loading
  • Port numbers get stripped from site URLs
  • Duplicate license keys created when using Generate License Keys button is used with bundles
  • New {renewal_discount} place holder for renewal notice emails
  • Slashes not properly stripped from renewal notices

Version 3.1.8, March 20, 2015

  • Fixed an incorrect version check when updating license keys during payment updates

Version 3.1.7, March 12, 2015

  • Fixed PHP notices triggered when updating payments with EDD v2.3+
  • Changed the user capability required to view licenses to edit_products
  • Added new hooks just before and after deleting and revoking license keys

Version 3.1.6,February 16, 2015

  • Added a "success" key to all API calls
  • Added "license_check" key to the get_version call
  • Updated the French translation files

Version 3.1.5, January 13, 2015

  • Fixed a bug with variable prices and renewal discount calculations (props Danny Van Kooten)

Version 3.1.4, December 29, 2014

  • Fixed a memory leak with expired license keys
  • Added the actual discount amount for renewals to the checkout screen
  • Added the item name being renewed next to the license key during renewals
  • Added new EDD_BYPASS_ITEM_ID_CHECK constant
  • Fixed several bugs with searching license keys.
  • Introduced edd_sl_get_download_id_by_license filter
  • Updated the ED_SL_Plugin_Updater class to fix some issues with multisite instances

Version 3.1.3, December 12, 2014

  • Fixed a bug with license renewals for non-yearly licenses
  • Tweaked the set_status() method to only save the status if the new status is different
  • Fixed a bug with clean_site_url() that caused issues for some site activations / deactivations
  • Fixed a bug with license row action links not working
  • Added missing HTTP response codes

Version 3.1.2, December 10, 2014

  • Fixed an important security flaw with package downloads
  • Fixed an undefined index notice with the Changelog widget
  • Fixed several minor security flaws
  • Improved URL cleaning when adding / removing sites

Version 3.1.1, December 5, 2014

  • Fixed a bug that could result in duplicate bulk actions taking place

Version 3.1, November 24, 2014

  • Added support for renewing multiple license keys at one time
  • Improved how items are discounted when renewing license keys
  • Automatically update license keys that were purchased as a guest when the respective user registers an account
  • Only load the plugin loader when in the admin area
  • Dramatically improved Sample Theme, thanks to Devin Price
  • Fixed a bug with license renewals and variable price options, thanks for Danny Van Kooten
  • Updated language files

Version 3.0.4, November 10, 2014

  • Fixed an incorrect filter name

Version 3.0.3, November 10, 2014

  • Fixed a bug with the apply license renewal form when the product uses variable prices
  • Fixed a bug that would prevent renewal notices from being sent out after the license had been renewed at least once
  • Fixed a bug that prevented the default renewal notice from being deleted

Version 3.0.2, November 4, 2014

  • Fixed a bug with renewal discounts and the Commissions extension that caused discounts to not be taken into account when generating commissions.
  • Fixed a bug in the EDD_SL_Plugin_Updater class that prevented updates from showing when not using multisite. Please update the file distributed with your plugins.

Version 3.0.1, October 29, 2014

  • Fixed a bug in the plugin updater class that caused update checks to run on every admin page load. Please update the version of EDD_SL_Plugin_Updater distributed with your plugins.

Version 3.0, October 21, 2014

  • Added support for multiple renewal notices, each sent at a designated time frame before or after license key expiration
  • Fixed a bug with renewing old license keys that did not have a price_id assigned to them
  • Fixed a bug in the EDD_SL_Plugin_Updater class that prevented plugin updates from working on non-primary sites in a multisite install
  • Improved the HTML markup of the license renewal form on the checkout screen
  • Added support for passing "item_id" instead of "item_name" to the API requests
  • Added new export options to allow exporting a CSV of license keys
  • Fixed an improper redirect when updating the expiration dates of license keys
  • Fixed several potential security vulnerabilities

Version 2.9.1, August 15, 2014

  • Fixed a critical bug with renewals of products that have variable prices, props Yoast
  • Fixed a bug in the Sample Plugin that caused update notices to not always show properly
  • Improved caching of the API response for the get_version call
  • Added a new filter to get_license_logs(), props Lee Willis
  • Fixed a bug with double encoding of product titles
  • Introduced a new filter called edd_sl_send_renewal_reminder
  • Store the time that renewal notices are sent instead of just "1"
  • Added a new filter for the the license key length, edd_sl_license_key_length

Version 2.9, June 30, 2014

  • Fixed a bug with license activation limits not being properly checked when manually adding new site URLs
  • Improved the Go Back buttons in the frontend license manager

Version 2.8.9, June 16, 2014

  • Fixed a bug with license keys not being updated when the user ID or email of the connected payment is updated
  • Fixed the missing retroactive licensing tool with EDD 2.0+
  • Fixed a 404 error caused by attempting to load a non-existent CSS file
  • Fixed a typo in the retroactive licensing section
  • Updated the View License Log link to use ajax to pull in the logs instead of querying them all on page looad.

Version 2.8.8, June 11, 2014

  • Fixed a bug with license activation limits when URL checking is disabled
  • Improved performance of the get_license_by_key() method
  • Improved performance of all API requests by disabling some default actions in WordPress core

Version 2.8.7, May 22, 2014

  • Fixed a security bug. Please update.

Version 2.8.6, May 20, 2014

  • Fixed a bug with searching license key.
  • Updated the ReadMe.txt cache expiration time to 6 hours

Version 2.8.5, May 19, 2014

  • Fixed a bug with filtering the licenses page when a specific view is chosen
  • Fixed a bug with retrieving the proper user info when sending renewal notices
  • Fixed a bug with when the text domain is loaded
  • Fixed a missing echo statement
  • Fix a bug with URLs that contain www or are https

Version 2.8.4, May 13, 2014

  • Fixed a bug with license expiration dates when renewing license keys
  • Fixed a typo
  • Fixed a performance issue with the log creation process when license keys are activated / deactivated by explicitly passing the post_name key to prevent WordPress from looking up possible slugs for the entry

Version 2.8.3, May 5, 2014

  • Fixed an undefined index for $item_id
  • Fixed a deprecated function call.
  • Fixed a bug with renewal notes for email addresses that contain dashes.
  • Fixed a bug that caused duplicate update checks
  • Added a French language file
  • Added "url" to sample license activation requests

Version 2.8.2, April 21, 2014

Added additional information about the license to the check_license API request.

Version 2.8.1, April 11, 2014
Fixed a bug with not being able to add / remove sites from the frontend license management.
Updated the package download expiration to 1 hour.
Improved the license renewal form.

Version 2.8, April 1, 2014
Added a new change log widget (thanks Lee Willis!)
Fixed a bug with slashes in changelogs
Fixed a positioning bug of the license key in purchase history in FireFox
Fixed a potential conflict with other filters attached to the_content
Fixed a bug with the license activation limit display in purchase history

Version 2.7, March 26, 2014
Added front-end licensing management so customers can activate / deactivate site URLs.
Improved missing license key generation on purchase records.
Added a renewal link to the Expired text shown on expired keys if renewals are enabled.
Tweaked check_license() method\'s logic for empty license IDs
Fixed a display conflict with Purchase Limits, Simple Shipping, and Recurring Payments extensions.
Better validation of site URLs.

Version 2.6.3, March 16, 2014
Fixed a bug with license key activation limits getting set to unlimited improperly.
Fixed the display of  Unlimited when manually setting a license activation limit to 0 (unlimited).
Added edd_remote_license_activation_response filter.

Version 2.6.2, March 11, 2014
Fixed a bug with license renewals that caused renewal discounts to sometimes be too high.
Fixed a bug with renewing variably-priced products.

Version 2.6.1, March 11, 2014
Fixed a bug with manual activation limit overrides that preventing them from being set to 0 for unlimited.

Version 2.6, February 28, 2014
Added an option to manually adjust the activation limits of license keys.
Added an option to generate license keys for products with missing keys from past purchases.
Added a visual editor to the Changelog field.
Fixed a bug with the activations_left response.
Added a notice to update notifications for expired license keys (to encourage renewals).

Version 2.5.2, February 18, 2014
Fixed an issue with site URLs getting stored and licenses activated even when at activation limits.

Version 2.5.1, February 11, 2014
Fixed a bug with the check_item_name() method introduced in v2.5. The item name being passed in the request needed to be passed through urldecode().

Version 2.5, February 10, 2014
Added support for setting license activation limits per each price option.

Fixed a bug with item name comparisons.

Improved the API responses for license activation requests.

Version 2.4.2, February 5, 2014
Updated the package download system to match the one in EDD core. Helps resolve occasional conflicts with WP Engine and other hosts.
Added support for delivering update packages via the Amazon S3 extension.

Version 2.4.1, January 31, 2014
Fixed a bug with nonce verification during download save.
Base license expiration off of purchase date instead of current time.
Added better support for activation counts when licenses are not tied to site URLs.
Fixed a bug with invalid activation responses because the expired check was running too early.

Version 2.4, January 23, 2014
New: added a retroactive licensing feature to generate keys on old purchases.

New: added option to automatically parse readme.txt files for WordPress plugins for populating the update notice dialog window.

New: added option to edit the expiration dates on license keys.

New: added option to manually add / remove site URLs from license keys.

New: added Renew link to expired license keys in purchase history and on the payment receipt page.

New: added \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"url\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" parameter to all license API requests that allow you to specify the exact URL an action is related to for a license.

Updated: rewrote how site URLs are stored to be much, much more efficient, dramatically improving performance and reliability. Also added an upgrade routine to move all site URLs to the new storage method.

Updated: moved the License metabox on Download edit screens to the main column and improved the general layout of the box.

Updated: use rawurldecode() instead of urldecode()

Version 2.3.2, December 18, 2013
Run item names through strtolower() before comparing them.

Version 2.3.1, December 13, 2013
Fixed a bug with file downloads of products that don\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'t have a license key.
Fixed a bug with the license renewal system that could possibly allow an incorrect renewal discount to be applied.

Version 2.3, December 13, 2013
Automatically disable file downloads if a license key is expired or revoked.
Show \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"Expired\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" on the purchase receipt and history if a license is expired.

Version 2.2.6, December 10, 2013
Fixed a bug that prevent renewal links from adding the item to the cart.

Version 2.2.5, December 8, 2013
Fixed a bug that would allow renewal discounts to be applied to an incorrect product.

Version 2.2.4, December 6, 2013
Fixed a bug with the \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"expires\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" return in the check_license request.

Version 2.2.3, December 2, 2013
Fixed a bug with license key generation on bundle products.

Version 2.2.2, December 2, 2013
Fixed a bug with generating license keys for past purchases.
Fixed a bug with checking the product a license key belongs to during activation / deactivation.

Version 2.2.1, November 19, 2013
Delete license keys when their associated payment is also deleted.

Version 2.2, November 11, 2013
Added license renewal reports in Downloads > Reports > License Renewals

Version 2.1.4, November 8, 2013
Fixed a bug that caused renewal notices to be sent multiple times.

Version 2.1.3, November 6, 2013
Fixed a bug that caused renewal notices to be sent out even if disabled.

Version 2.1.2, November 5, 2013
Made the Purchased and Expires columns sortable.
Updated the renewal process to set the new expiration date based on the original expiration date, not the renewal date.

Version 2.1.1, November 4, 2013
Removed a leftover debugging function level that was left by accident.

Version 2.1, October 29, 2013
Added support for adding a list of predefined license keys to products that keys are then generated from for purchases.

Version 2.0.1, October 22, 2013
Fixed a bug that caused license checks to not validate on some sites.

Version 2.0, October 21, 2013
Added support for per-product license expiration dates.

Added cron event for daily checking of expired license keys.

Added a EDD_SL_REDIRECT_UPDATES constant for servers that have problems delivering update files.

Version 1.9.1
Fixed an issue with renewal discount calculations.
Added a new EDD_SL_REDIRECT_UPDATES constant that can be defined if file downloads during updates are corrupted.

Version 1.9
Added new option to generate license keys for payments without license keys for purchased products.
Added a new http_request_args() filter in the plugin update class to ensure ssl verification is disabled during updates.

Version 1.8.2
Fixed a bug with site URLs getting stored at license activation.

Version 1.8.1
Fixed a bug with license renewals.

Version 1.8
Fixed an exploit that could result in malicious users being able to potentially download files via the updater system.
Fixed a bug with html entities in license activation / checking.
Added the ability to Disable license keys.
Automatically disable license keys when associated payments are refunded or revoked.

Version 1.7.3
Added support for quantities introduced in EDD v1.7.

Version 1.7.2
Fixed a compatibility issue with the checkout screen of EDD v1.7.

Version 1.7.1
Fixed an issue with quick edit.

Version 1.7
Use stripos() instead of strpos() when activating a license key.
Fixed an incorrect text domain.
Removed the broken get_license_by_download() function.
Fixed an undefined index on the \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'url\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' parameter when performing update checks.
Added a new /changelog endpoint to Downloads to allow the changelog to be displayed.

Version 1.6
Added a license renewal system. Once update is installed, go to Downloads > Settings > Extensions and configure the renewal system.

Version 1.5.1
Fixed an issue with duplicate license keys getting generated.

Version 1.5
Added compatibility for Bundled products in EDD 1.6

Version 1.4.5
Fixed a bug with license activation on products that have a dash in their name.
Fixed a problem with deactivating a license key.
Fixed a missing product description in the plugin updater.

Version 1.4.4
Fixed an undefined index bug.
Fixed an issue with duplicate license keys getting generated when changing payment status.

Version 1.4.3
Fixed an issue with user agents.

Version 1.4.2
Fixed an issue with the update notices not showing.

Version 1.4.1
Fixed a bug with the new per-site statuses.

Version 1.4
Updated so that each site a license is used on receives a status, which fixes a bug with being able to update even when a license is inactive.

Fixed a compatibility problem with EDD v1.5.

Version 1.3.9
Fixed several undefined index errors.
Fixed an issue with the edd_license_log post type being registered too late.
Added an option to force every license activation to be counted.
Updated the Them Updater class to use get_stylesheet().

Version 1.3.8
Fixed an incorrect option value in the updater.
Added an improved license key field that allows for licenses to be deactivated.

Version 1.3.7
Fixed an issue with deactivated license keys still allowing updates.

Version 1.3.6
Added license keys to the Sorry, trouble retrieving payment receipt. short code.
Fixed a bug with site counts when reactivating a site\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s license key.

Version 1.3.5
Fixed a bug with the site counts during activation so that each unique URL is now only counted as a single site. Props Joost de Valk.

Version 1.3.4
Dramatically improved performance of Licenses admin page.
Added license counts for each Status View in the admin.
Added new $download_id parameter to is_at_limit() member function.
Improved code formatting.

Version 1.3.3
Fixed an issue with the get_version remote request for non-WordPress implementations.

Version 1.3.2
Made a significant performance improvement for all remote requests. Props to @Yoast

Version 1.3.1
Fixed an undefined function error when searching for license keys.

Version 1.3
Added a method for remotely deactivating license keys.
Updated the sample plugin and theme with examples of deactivating license keys remotely.
Improved the log entries for license activation and deactivation.

Version 1.2.1
Fixed a bug with license keys on the purchase history page.

Version 1.2
Added a license search field.
Improved sample plugin and theme.
Simplified the sample theme.

Version 1.1.1
Added some additional action hooks.

Version 1.1
Added option to limit the number of times a license can be activated.
Added license keys to the Purchase History short code so buyers can easily retrieve their license keys.
Updated default language files.

Version 1.0.1
Fixed a bug with the updater.
Changed the licensing page to show 20 items instead of 5.

Version 1.0
Initial release.