{"id":286353,"date":"2026-03-18T14:16:58","date_gmt":"2026-03-18T14:16:58","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/wpeasy-license-manager\/"},"modified":"2026-03-18T21:05:33","modified_gmt":"2026-03-18T21:05:33","slug":"jb-license-manager","status":"publish","type":"plugin","link":"https:\/\/scn.wordpress.org\/plugins\/jb-license-manager\/","author":13405442,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.0.0","stable_tag":"2.0.0","tested":"6.9.4","requires":"5.8","requires_php":"7.2","requires_plugins":null,"header_name":"JB License Manager for WooCommerce","header_author":"junaidbhatti","header_description":"Sell and manage software licenses with WooCommerce. Auto-deliver license keys, multi-domain activation, instant remote deactivation via heartbeat, REST API, CSV export\/import, customer dashboard, and activity logs.","assets_banners_color":"181c3d","last_updated":"2026-03-18 21:05:33","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/jb-license-manager\/","header_author_uri":"https:\/\/profiles.wordpress.org\/junaidbhatti\/","rating":5,"author_block_rating":0,"active_installs":0,"downloads":181,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.0":{"tag":"2.0.0","author":"junaidbhatti","date":"2026-03-18 21:05:33"}},"upgrade_notice":{"2.0.0":"<p>Major update with instant deactivation, monthly validity, and redesigned admin UI. Deactivate and delete the old version, then install 2.0.0. Your data (licenses, activations, logs) is preserved \u2014 only plugin files are replaced.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3485783,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3485783,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3485783,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3485783,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.0"],"block_files":[],"assets_screenshots":{"Screenshot-1.png":{"filename":"Screenshot-1.png","revision":3485762,"resolution":"1","location":"assets","locale":""},"Screenshot-2.png":{"filename":"Screenshot-2.png","revision":3485762,"resolution":"2","location":"assets","locale":""},"Screenshot-3.png":{"filename":"Screenshot-3.png","revision":3485762,"resolution":"3","location":"assets","locale":""},"Screenshot-4.png":{"filename":"Screenshot-4.png","revision":3485762,"resolution":"4","location":"assets","locale":""},"Screenshot-5.png":{"filename":"Screenshot-5.png","revision":3485762,"resolution":"5","location":"assets","locale":""}},"screenshots":{"1":"<strong>Dashboard<\/strong> \u2014 stats cards, filterable license table with domain progress bars.","2":"<strong>Create License<\/strong> \u2014 product auto-fill, validity period picker, expiry preview chip.","3":"<strong>Export \/ Import<\/strong> \u2014 drag-and-drop CSV upload, column schema reference.","4":"<strong>Settings<\/strong> \u2014 general, email, and REST API configuration with encryption status banner.","5":"<strong>Product configuration<\/strong> \u2014 Product configuration set vaildity Period and max domain."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[258044,58361,146554,26437,158693],"plugin_category":[],"plugin_contributors":[258045],"plugin_business_model":[],"class_list":["post-286353","plugin","type-plugin","status-publish","hentry","plugin_tags-license-activation","plugin_tags-license-key","plugin_tags-license-manager","plugin_tags-software-license","plugin_tags-woocommerce-license","plugin_contributors-junaidbhatti","plugin_committers-junaidbhatti"],"banners":{"banner":"https:\/\/ps.w.org\/jb-license-manager\/assets\/banner-772x250.png?rev=3485783","banner_2x":"https:\/\/ps.w.org\/jb-license-manager\/assets\/banner-1544x500.png?rev=3485783","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/jb-license-manager\/assets\/icon-128x128.png?rev=3485783","icon_2x":"https:\/\/ps.w.org\/jb-license-manager\/assets\/icon-256x256.png?rev=3485783","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/jb-license-manager\/assets\/Screenshot-1.png?rev=3485762","caption":"<strong>Dashboard<\/strong> \u2014 stats cards, filterable license table with domain progress bars."},{"src":"https:\/\/ps.w.org\/jb-license-manager\/assets\/Screenshot-2.png?rev=3485762","caption":"<strong>Create License<\/strong> \u2014 product auto-fill, validity period picker, expiry preview chip."},{"src":"https:\/\/ps.w.org\/jb-license-manager\/assets\/Screenshot-3.png?rev=3485762","caption":"<strong>Export \/ Import<\/strong> \u2014 drag-and-drop CSV upload, column schema reference."},{"src":"https:\/\/ps.w.org\/jb-license-manager\/assets\/Screenshot-4.png?rev=3485762","caption":"<strong>Settings<\/strong> \u2014 general, email, and REST API configuration with encryption status banner."},{"src":"https:\/\/ps.w.org\/jb-license-manager\/assets\/Screenshot-5.png?rev=3485762","caption":"<strong>Product configuration<\/strong> \u2014 Product configuration set vaildity Period and max domain."}],"raw_content":"<!--section=description-->\n<p><strong>JB License Manager for WooCommerce<\/strong> turns your WordPress + WooCommerce site into a complete software licensing server. Sell plugins, themes, SaaS tools, or any digital product and automatically deliver encrypted license keys, control which domains can use each license, and revoke access instantly \u2014 all from your own WordPress dashboard.<\/p>\n\n<h3>\ud83d\udd11 Core Licensing<\/h3>\n\n<ul>\n<li><strong>Automatic key generation<\/strong> \u2014 cryptographically random keys with customizable prefix (e.g. <code>MYAPP-XXXXXX-XXXXXX-XXXXXX<\/code>)<\/li>\n<li><strong>WooCommerce auto-delivery<\/strong> \u2014 license key is emailed to the customer the moment an order is completed, processing, or payment confirmed<\/li>\n<li><strong>Multi-domain activation<\/strong> \u2014 each license can allow 1 to unlimited domains (configured per product)<\/li>\n<li><strong>Domain allow \/ disallow<\/strong> \u2014 admin or customer can block a specific domain without revoking the whole license<\/li>\n<li><strong>Instant remote deactivation<\/strong> \u2014 when a domain is disallowed, the client plugin detects it within 15 seconds via WordPress Heartbeat and immediately locks premium features \u2014 no click required on the client site<\/li>\n<li><strong>Expiry by months or years<\/strong> \u2014 set 1 Month, 3 Months, 6 Months, 1 Year, 2 Years, or any duration (1\u2013120 months \/ 1\u201310 years)<\/li>\n<li><strong>Status management<\/strong> \u2014 Active, Inactive, Suspended, Expired, Revoked<\/li>\n<li><strong>Automatic expiry<\/strong> \u2014 daily cron marks licenses expired and sends reminder emails<\/li>\n<li><strong>Domain-level encryption<\/strong> \u2014 activated domain names are hashed and never stored in plain text<\/li>\n<\/ul>\n\n<h3>\ud83d\uded2 WooCommerce Integration<\/h3>\n\n<ul>\n<li>Dedicated <strong>License<\/strong> product tab \u2014 enable licensing per product with one click<\/li>\n<li>Set <strong>max domains<\/strong>, <strong>validity period<\/strong>, and <strong>key prefix<\/strong> per product<\/li>\n<li>Auto-fill license settings from product when creating a manual license<\/li>\n<li>License key shown on the <strong>order details page<\/strong> inside WooCommerce<\/li>\n<li><strong>My Account \u2192 Licenses<\/strong> \u2014 full customer portal with all purchased licenses<\/li>\n<li>Customer can <strong>view<\/strong>, <strong>copy<\/strong>, and <strong>allow\/disallow<\/strong> their own domains without contacting support<\/li>\n<li>Per-domain popup card showing activation date, last validated time, and IP address<\/li>\n<\/ul>\n\n<h3>\ud83c\udf10 REST API<\/h3>\n\n<p>Full public and admin REST API at <code>\/wp-json\/jblm\/v1\/<\/code>:<\/p>\n\n<p><strong>Public endpoints (license key authentication):<\/strong><\/p>\n\n<ul>\n<li><code>POST \/activate<\/code> \u2014 register a domain against a license key<\/li>\n<li><code>POST \/validate<\/code> \u2014 verify a license key + domain (12-hour cached on client)<\/li>\n<li><code>POST \/deactivate<\/code> \u2014 release a domain slot<\/li>\n<li><code>POST \/status<\/code> \u2014 lightweight heartbeat check (does not update last_validated)<\/li>\n<\/ul>\n\n<p><strong>Admin endpoints (API key or logged-in admin):<\/strong><\/p>\n\n<ul>\n<li><code>GET \/licenses<\/code> \u2014 list all licenses with pagination, search, status filter<\/li>\n<li><code>POST \/licenses<\/code> \u2014 create a license programmatically<\/li>\n<li><code>GET \/licenses\/{id}<\/code> \u2014 get single license with activations<\/li>\n<li><code>PUT \/licenses\/{id}<\/code> \u2014 update status, max_domains, expiry<\/li>\n<li><code>DELETE \/licenses\/{id}<\/code> \u2014 revoke a license<\/li>\n<li><code>GET \/licenses\/{id}\/activations<\/code> \u2014 list all domain activations<\/li>\n<li><code>GET \/stats<\/code> \u2014 dashboard stats (total, active, expired, expiring, revoked)<\/li>\n<\/ul>\n\n<h3>\ud83d\udcca Admin Dashboard<\/h3>\n\n<ul>\n<li><strong>Stats cards<\/strong> \u2014 Total \/ Active \/ Expiring Soon \/ Expired \/ Revoked at a glance<\/li>\n<li><strong>Filterable table<\/strong> \u2014 search by email or key, filter by status<\/li>\n<li><strong>Click-to-copy<\/strong> license keys<\/li>\n<li><strong>View Sites popup modal<\/strong> \u2014 see all activated domains per license, allow\/disallow with one click, quick status change<\/li>\n<li><strong>Domain progress bar<\/strong> \u2014 visual fill showing slots used vs. available<\/li>\n<li><strong>Expiry countdown<\/strong> \u2014 \"14d left\" shown in amber when expiring soon<\/li>\n<li><strong>Activity Logs page<\/strong> \u2014 last 500 events with time, license key, action, domain, IP, and result<\/li>\n<li><strong>Settings page<\/strong> \u2014 key prefix, expiry reminder days, email from name\/address, email subject and template, REST API key<\/li>\n<\/ul>\n\n<h3>\u2709\ufe0f Email Notifications<\/h3>\n\n<ul>\n<li><strong>License delivery email<\/strong> \u2014 sent automatically on WooCommerce order completion<\/li>\n<li><strong>Expiry reminder email<\/strong> \u2014 sent N days before expiry (configurable)<\/li>\n<li><strong>Status change email<\/strong> \u2014 sent when license is suspended or revoked<\/li>\n<li>Fully customizable HTML template with placeholder tags: <code>{license_key}<\/code>, <code>{expires_at}<\/code>, <code>{max_domains}<\/code>, <code>{order_id}<\/code>, <code>{customer_email}<\/code>, <code>{site_name}<\/code>, <code>{site_url}<\/code><\/li>\n<\/ul>\n\n<h3>\ud83d\udce4 CSV Export \/ Import<\/h3>\n\n<ul>\n<li>Export all or filtered licenses to CSV with one click<\/li>\n<li>CSV includes: ID, License Key, Customer Email, Status, Max Domains, Active Domains, Expiry, Order ID, Product ID, Created At, Active Domain URLs<\/li>\n<li>Bulk import licenses from CSV \u2014 only <code>customer_email<\/code> required; other columns optional<\/li>\n<li>Drag-and-drop upload zone in admin<\/li>\n<li>Duplicate keys automatically skipped on import with per-row error reporting<\/li>\n<\/ul>\n\n<h3>\ud83d\udd12 Security<\/h3>\n\n<ul>\n<li>All domain names stored as <strong>SHA-256 hashes<\/strong> \u2014 even database access cannot reveal which domains are activated<\/li>\n<li>Encryption secret key auto-generated on activation and stored securely in the database. Optionally define <code>JBLM_SECRET_KEY<\/code> in wp-config.php to use a custom value<\/li>\n<li>All AJAX handlers protected with <code>wp_nonce<\/code> and <code>current_user_can()<\/code> checks<\/li>\n<li>All API inputs sanitized with <code>sanitize_text_field()<\/code>, <code>sanitize_email()<\/code>, <code>intval()<\/code><\/li>\n<li>All outputs escaped with <code>esc_html()<\/code>, <code>esc_attr()<\/code>, <code>esc_url()<\/code><\/li>\n<li>All database queries use <code>$wpdb-&gt;prepare()<\/code> with parameterized placeholders<\/li>\n<\/ul>\n\n<h3>\ud83d\udce6 Client SDK<\/h3>\n\n<p>Include the bundled <code>jblm-client.php<\/code> in your plugin or theme see sample below:<\/p>\n\n<pre><code>&lt;?php\n\/**\n * Plugin Name: Your Plugin Name\n * Version: 1.0.0\n *\/\n\n\/\/ ============================================================\n\/\/ STEP 1 \u2014 Load the license client\n\/\/ Copy jblm-client.php into your plugin folder, then include it.\n\/\/ ============================================================\nrequire_once plugin_dir_path( __FILE__ ) . 'jblm-client.php';\n\n\n\/\/ ============================================================\n\/\/ STEP 2 \u2014 Set up your license\n\/\/ Replace the two values below:\n\/\/   - 'https:\/\/yoursite.com'  \u2192 the site where you installed JB License Manager\n\/\/   - 'your-plugin-slug'      \u2192 any unique name for your plugin (no spaces)\n\/\/ ============================================================\n$license = new JBLM_Client(\n    'https:\/\/yoursite.com',   \/\/ \u2190 CHANGE THIS\n    'your-plugin-slug'        \/\/ \u2190 CHANGE THIS  e.g. 'my-seo-plugin'\n);\n\n\n\/\/ ============================================================\n\/\/ STEP 3 \u2014 Register AJAX (required for Activate\/Deactivate buttons)\n\/\/ Just copy this line as-is. Don't change anything.\n\/\/ ============================================================\nadd_action( 'plugins_loaded', function() use ( $license ) {\n    $license-&gt;register_ajax_hooks();\n});\n\n\n\/\/ ============================================================\n\/\/ STEP 4 \u2014 Block your premium features if license is not active\n\/\/ Put this check at the top of any function that has premium code.\n\/\/ If the license is invalid, the function will stop here.\n\/\/ ============================================================\nfunction my_premium_feature() {\n    global $license;\n\n    if ( ! $license-&gt;is_valid() ) {\n        return; \/\/ \u2190 stops here if no valid license\n    }\n\n    \/\/ Your premium code goes below this line \u2193\n    echo 'Premium feature is running!';\n}\n\n\n\/\/ ============================================================\n\/\/ STEP 5 \u2014 Show the License Key field on your settings page\n\/\/ Call this inside the function that renders your settings page.\n\/\/ It will show an input box + Activate \/ Deactivate buttons.\n\/\/ ============================================================\nfunction my_plugin_settings_page() {\n    global $license;\n\n    echo '&lt;h1&gt;My Plugin Settings&lt;\/h1&gt;';\n\n    \/\/ This one line draws the full license box \u2014 input + buttons\n    $license-&gt;render_settings_field();\n\n    \/\/ ... rest of your settings fields\n}\n<\/code><\/pre>\n\n<p>The SDK handles:\n* License activation, validation (12 h cache), deactivation\n* WordPress Heartbeat integration for instant deactivation \u2014 no click needed\n* Built-in settings page with Activate \/ Check Status \/ Deactivate buttons\n* Friendly Urdu\/English error messages for common failure cases<\/p>\n\n<h3>\u26a1 Performance<\/h3>\n\n<ul>\n<li>License validation results cached as WordPress transients (12 hours by default)<\/li>\n<li>Heartbeat status check (<code>\/status<\/code>) does not write to the database \u2014 read-only<\/li>\n<li>Index on <code>license_key<\/code>, <code>domain_hash<\/code>, <code>user_id<\/code>, <code>status<\/code>, and <code>created_at<\/code> columns<\/li>\n<li>WooCommerce integration only loads when WooCommerce is active<\/li>\n<\/ul>\n\n<h3>Privacy Policy<\/h3>\n\n<p>JB License Manager for WooCommerce stores the following data in your WordPress database:<\/p>\n\n<ul>\n<li><strong>License keys<\/strong> (hashed) and associated customer email addresses<\/li>\n<li><strong>Domain names<\/strong> (stored as SHA-256 hashes \u2014 not in plain text)<\/li>\n<li><strong>IP addresses<\/strong> of activation and validation requests<\/li>\n<li><strong>Timestamps<\/strong> of all license events<\/li>\n<\/ul>\n\n<p>This data is stored solely on your own WordPress server. No data is transmitted to any third-party service by this plugin.<\/p>\n\n<p><strong>External connections:<\/strong> Client sites that use the bundled SDK connect to your WordPress store URL to activate, validate, and check license status. This is a direct connection between two sites you control.<\/p>\n\n<p>If you collect or process personal data (such as customer email addresses), ensure your site has an appropriate privacy policy as required by GDPR, CCPA, or your local regulations.<\/p>\n\n<h3>Developer SDK<\/h3>\n\n<p>The client-side SDK (for your own plugins\/themes to validate licenses against this server) is available as a <strong>separate download<\/strong> from the plugin's GitHub page. It is NOT included in the WordPress.org version of this plugin.<\/p>\n\n<p>The WordPress.org version of this plugin is the <strong>license server<\/strong> \u2014 it stores and manages licenses. It does not lock any features behind a license check.<\/p>\n\n<!--section=installation-->\n<h4>Automatic Installation<\/h4>\n\n<ol>\n<li>Log in to your WordPress admin panel.<\/li>\n<li>Go to <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Search for <strong>JB License Manager for WooCommerce<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong> then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<h4>Manual Installation<\/h4>\n\n<ol>\n<li>Download the plugin ZIP file.<\/li>\n<li>Go to <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Choose the ZIP file and click <strong>Install Now<\/strong>.<\/li>\n<li>Click <strong>Activate Plugin<\/strong>.<\/li>\n<\/ol>\n\n<h4>After Activation<\/h4>\n\n<ol>\n<li>Go to <strong>License Manager \u2192 Settings<\/strong> and configure your email sender, key prefix, and (optionally) generate a REST API key.<\/li>\n<li>Edit any WooCommerce product, open the <strong>License<\/strong> tab, enable licensing, and set max domains and validity.<\/li>\n<li>When a customer completes checkout, a license key is automatically generated and emailed.<\/li>\n<li>Include <code>jblm-client.php<\/code> in your plugin\/theme and point it to your store URL.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20woocommerce%3F\"><h3>Do I need WooCommerce?<\/h3><\/dt>\n<dd><p>WooCommerce is required for automatic license delivery on purchase. You can still create and manage licenses manually without WooCommerce, but automatic order integration requires it.<\/p><\/dd>\n<dt id=\"can%20i%20use%20this%20without%20woocommerce%20for%20saas%3F\"><h3>Can I use this without WooCommerce for SaaS?<\/h3><\/dt>\n<dd><p>Yes. Create licenses manually via <strong>License Manager \u2192 Create License<\/strong> or via the REST API (<code>POST \/wp-json\/jblm\/v1\/licenses<\/code>). The REST API accepts Bearer token or cookie authentication.<\/p><\/dd>\n<dt id=\"how%20does%20instant%20deactivation%20work%3F\"><h3>How does instant deactivation work?<\/h3><\/dt>\n<dd><p>When an admin or customer disallows a domain, the database record is updated immediately. The client plugin uses WordPress Heartbeat (every 15 seconds in admin) to ping your server's lightweight <code>\/status<\/code> endpoint. When it receives <code>valid: false<\/code>, it clears the local cache and reloads the page \u2014 premium features disappear within 15 seconds without any manual action on the client site.<\/p><\/dd>\n<dt id=\"is%20customer%20data%20sent%20anywhere%20outside%20my%20site%3F\"><h3>Is customer data sent anywhere outside my site?<\/h3><\/dt>\n<dd><p>No. All license data is stored in your own WordPress database. The only external connection is between client sites (running the SDK) and your own WordPress site (the license server). No data is sent to third-party servers by this plugin.<\/p><\/dd>\n<dt id=\"how%20are%20domain%20names%20stored%3F\"><h3>How are domain names stored?<\/h3><\/dt>\n<dd><p>Domain names are stored as SHA-256 hashes, not in plain text. Even if your database is compromised, the activated domain names cannot be read directly.<\/p><\/dd>\n<dt id=\"can%20customers%20manage%20their%20own%20licenses%3F\"><h3>Can customers manage their own licenses?<\/h3><\/dt>\n<dd><p>Yes. The WooCommerce <strong>My Account \u2192 Licenses<\/strong> page allows customers to view all their licenses, see which domains are activated, and allow or disallow domains themselves \u2014 no support tickets needed.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20a%20license%20expires%3F\"><h3>What happens when a license expires?<\/h3><\/dt>\n<dd><p>A daily cron job checks for expiring licenses. When a license expires, its status is set to <code>expired<\/code> and the customer receives an expiry reminder email N days before (configurable). The <code>\/validate<\/code> endpoint returns <code>license_expired<\/code> and the client SDK disables premium features.<\/p><\/dd>\n<dt id=\"can%20i%20import%20existing%20licenses%3F\"><h3>Can I import existing licenses?<\/h3><\/dt>\n<dd><p>Yes. Go to <strong>License Manager \u2192 Export \/ Import<\/strong> and upload a CSV file. Only the <code>customer_email<\/code> column is required. Existing license keys in the CSV are automatically skipped to prevent duplicates.<\/p><\/dd>\n<dt id=\"how%20do%20i%20secure%20the%20rest%20api%3F\"><h3>How do I secure the REST API?<\/h3><\/dt>\n<dd><p>Generate an API key in <strong>License Manager \u2192 Settings \u2192 REST API<\/strong>. Send it as the <code>X-JBLM-API-Key<\/code> header with all admin endpoint requests. Public endpoints (activate, validate, deactivate, status) are authenticated by the license key itself.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20translation-ready%3F\"><h3>Is the plugin translation-ready?<\/h3><\/dt>\n<dd><p>Yes. All user-facing strings use the <code>jblm<\/code> text domain. You can translate the plugin using Loco Translate, WPML String Translation, or by submitting translations to translate.wordpress.org.<\/p><\/dd>\n<dt id=\"what%20php%20version%20is%20required%3F\"><h3>What PHP version is required?<\/h3><\/dt>\n<dd><p>PHP 7.2 or higher. PHP 8.0, 8.1, 8.2, and 8.3 are all supported and tested.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>WooCommerce auto-delivery on order complete\/processing<\/li>\n<li>Multi-domain activation with domain hashing<\/li>\n<li>REST API (activate, validate, deactivate, admin CRUD)<\/li>\n<li>Customer My Account portal<\/li>\n<li>CSV export and import<\/li>\n<li>Admin dashboard, create, settings, and logs pages<\/li>\n<li>Auto-generate encryption secret key on activation (stored in database)<\/li>\n<li>Daily cron for expiry reminders<\/li>\n<\/ul>","raw_excerpt":"Sell software licenses via WooCommerce. Auto-deliver keys, multi-domain activation, instant deactivation, REST API, and My Account license page.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/286353","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=286353"}],"author":[{"embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/junaidbhatti"}],"wp:attachment":[{"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=286353"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=286353"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=286353"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=286353"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=286353"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=286353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}