Licence keys that answer from Stripe
Your plugin sends a key and the site it runs on. licencebook finds the Stripe subscription the key was made from and answers with what it pays for: the tier, the features, how many sites. The answer comes back signed, so your plugin keeps it for 24 hours and checks it with no network call. If we go down, nobody who paid gets switched off.
The Contract
Three calls, one request body, one answer shape. The full text is licence-v1.md, and the shape is licence-v1.schema.json.
POST /api/licence/v1/checkWhat the key pays for on this site. Moves nothing.POST /api/licence/v1/activateTakes a seat for this site, then answers as check does. A seat is one site the key is switched on for.POST /api/licence/v1/deactivateFrees the seat, so a customer can move a site even on a lapsed key.
{ "key": "lb_…", "site": "shop.example.com", "product": "noticesolved-ai-act-pro", "plugin_version": "1.4.0" }
| Reason | Meaning | What the plugin shows |
|---|---|---|
unknown_key | No subscription carries this key. | Ask for the key again. |
revoked | We switched the key off by hand: a refund, a chargeback, a key posted in public. | The support address. |
expired | The subscription is cancelled, unpaid, or past its paid period. | The renewal link. |
seat_limit | Every seat is taken and this site holds none. | The sites, and a way to free one. |
product_mismatch | The key belongs to another product. | The product the key is for. |
Anything but a 200, and any network failure, means no answer: the plugin keeps its last signed one and changes nothing.
Our Own Add-ons
Our first customers are our own plugins. On 13 October 2026, none of the three NoticeSolved Pro add-ons could switch on for a paying customer: each turns on only where our own sites set NOTICESOLVED_DOGFOOD, and each names a licence address that does not resolve.
| Add-on | Licence address it names | Resolves | On for a paying customer |
|---|---|---|---|
contentsolved-ai-act-wordpress | ai-act.noticesolved.io/api/licence/v1 | No (ENOTFOUND) | No: our own sites only |
contentsolved-consent-wordpress | consent.noticesolved.io/api/licence/v1 | No (ENOTFOUND) | No: our own sites only |
contentsolved-access-wordpress | access.noticesolved.io/api/licence/v1 | No (ENOTFOUND) | No: our own sites only |