WordPress plugins
License your WordPress plugins with domain-mode
Tie each license to the website it is installed on, so a single key cannot run on 100 sites. Works with any WordPress plugin.
Step-by-step integration guide// In your plugin's main file, validate on admin_init
add_action('admin_init', function () {
$response = wp_remote_post('https://api.licensr.app/v1/license/validate', [
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . YOUR_PLUGIN_API_KEY,
],
'body' => wp_json_encode([
'license_key' => get_option('my_plugin_license_key'),
'plugin_slug' => 'my-plugin',
]),
]);
// First run: call /v1/license/activate once with the site's domain (see the guide)
$body = json_decode(wp_remote_retrieve_body($response), true);
if (isset($body['valid']) && $body['valid'] === false) {
// Disable premium features
}
// No answer (network error, 429, 5xx): keep the previous state
});Anti-piracy for distributed plugins
Per-domain activations: Each activation is tied to the site’s domain and counts against the plan’s site limit.
HMAC-peppered storage: Keys are hashed before storage. A database breach does not expose working license keys.
Why domain-mode for WordPress
One license per site
Each activation binds to the domain it is installed on. A single-site key activated on shop.example.com cannot be activated on a second domain until the first is released.
Site limits that hold
Each activation is tied to the site’s domain and counts against the plan’s site limit. A shared key runs out of activations instead of spreading to every site.
Multi-site support
Sell plans with 1, 3, or unlimited domain activations. Customers sign in on a branded page and self-manage which domains are active from a portal carrying your logo and colours.
Subscription lifecycle included
Renewals, grace periods, and cancellation are handled automatically via Stripe. When a subscription lapses, the license transitions to expired and validate returns false.
Ready to license your WordPress plugin?
Free tier available. From signup to a working validate call in about 30 minutes.

