White-label Licenses

Distribute one plugin to multiple client sites with per-site branding — custom name, colours, logo, support details, and feature flags — using white-label licenses.

White-label licenses let an agency ship a single plugin to many client sites where each site sees its own branding in the plugin's admin UI: a custom name, brand colours, logo URL, support contact, feature flags, and any other fields you need.

Each license has its own API key that can be revoked independently, and branding is fetched at runtime so you can update it without redeploying the plugin.

White-label licenses are available on the Agency plan only.

Creating a license

  1. Open your plugin in the dashboard and go to Settings.
  2. Find the White-label Licenses card and click Add license.
  3. Fill in the fields:
Field Purpose
Label Internal name — only visible in this dashboard
Client name Shown in the WP admin UI instead of the canonical plugin name
Primary color Brand hex colour, e.g. #1A56DB
Foreground color Text colour for use on the primary background, e.g. #ffffff
Metadata Free-form JSON for any extra fields your plugin needs
  1. Click Create license. The raw API key is shown once — copy it and give it to the site owner.

Metadata

The metadata field accepts any valid JSON object. There is no enforced schema — put whatever your plugin reads at runtime:

	{
	"logo_url": "https://acme.com/logo.svg",
	"support_email": "help@acme.com",
	"report_from": "Acme SEO <noreply@acme.com>",
	"report_footer": "Powered by Acme · acme.com",
	"features": {
		"multi_country": true,
		"vehicle_compatibility": false,
		"content_creation": false,
		"schema_markup": true,
		"geo_monitoring": true
	},
	"default_country": "NL",
	"default_locale": "nl_NL"
}

WordPress plugin integration

Install or update the AutomagicWP updater (v1.1.0+):

	composer require automagicwp/updater

Pass the license key as the secret option, then call get_config() wherever you need branding data:

	use AutomagicWPUpdaterPluginUpdater;
 
add_action('init', function () {
    $updater = new PluginUpdater([
        'file'   => __FILE__,
        'id'     => 'plugin_abc123',
        'secret' => get_option('my_plugin_license_key'),
    ]);
 
    $config = $updater->get_config();
 
    if ($config) {
        $client_name = $config->clientName             ?? 'My Plugin';
        $primary     = $config->primaryColor           ?? '#2563eb';
        $foreground  = $config->primaryForegroundColor ?? '#ffffff';
 
        // Metadata fields
        $logo          = $config->metadata->logo_url      ?? '';
        $support_email = $config->metadata->support_email ?? '';
 
        // Feature flags
        $features      = (array) ($config->metadata->features ?? []);
        if ($features['multi_country'] ?? false) {
            // enable multi-country UI
        }
    }
});

get_config() caches the response in a WordPress transient for 5 minutes. Pass force: true to bypass the cache — useful after a settings save:

	$config = $updater->get_config(force: true);

License key settings field

Add a settings field so the site owner can paste their license key:

	add_action('admin_init', function () {
    register_setting('my_plugin_settings', 'my_plugin_license_key');
 
    add_settings_field(
        'license_key',
        'License Key',
        function () {
            $key = get_option('my_plugin_license_key', '');
            echo '<input type="password" name="my_plugin_license_key"
                         value="' . esc_attr($key) . '" class="regular-text">';
        },
        'my-plugin',
        'my_plugin_license_section'
    );
});

Plugin name in WP Admin update notices

When a site checks for updates using a license key, the update notification in WP Admin automatically uses the client name set on the license — no extra code needed.

Revoking a license

Click the trash icon on any license row in the dashboard. The API key is revoked immediately and the site will receive a 401 on its next update check or config fetch.

Need help? Email support@automagicwp.com