Use four concepts instead of one license flag
A license is the commercial record. An activation is a specific site or domain using it. An entitlement is the permission granted by a plan or purchase. An update permission is the decision to deliver a new package. Keeping those concepts separate makes renewals, refunds, upgrades, and site moves easier to reason about.
This model also gives support a useful vocabulary. A customer can have a valid license with an exhausted activation limit, or an active site with an expired update entitlement. Those are different issues and deserve different messages.
Make site moves a normal path
Development, staging, migrations, and domain changes are normal in WordPress. A customer should be able to see active domains, deactivate an old site, and activate the replacement without opening a support ticket for every move. If an automated transfer is unsafe, explain the review step clearly.
Record activation events with timestamps, product identifiers, and a stable account reference. Avoid collecting more site content than the licensing decision requires. Licenseistic is intended to provide this kind of foundation for commercial plugin and theme teams.
Document failure states and the API boundary
Update checks need explicit behavior for an invalid key, a temporary network failure, a revoked entitlement, and an unavailable licensing service. Do not turn a transient outage into an unexpected site shutdown. Give site owners a safe fallback and tell them what the plugin is doing.
If you expose an API, document authentication, rate limits, idempotency, response codes, and how secrets are rotated. WordPress's REST API documentation is a useful baseline for thinking about resource design and authentication, even when your service has its own implementation.