1. Connect your site
- Create a workspace and register the canonical website domain.
- Issue a license key and copy it when shown.
- Install the MarlinVix WordPress plugin and enter the key.
- Activation binds that license to the registered domain.
2. Sign each request
The signature is an HMAC-SHA256 of timestamp.nonce.domain.sha256(body) keyed by the license secret. Requests outside the five-minute window or reusing a nonce are rejected.
x-mvx-license: MVX_xxxxxxxxxxxxxxxx x-mvx-domain: example.com x-mvx-timestamp: 1730000000 x-mvx-nonce: 8f3c1d... x-mvx-signature: <hex hmac-sha256>
3. Versioned endpoints
| Method | Path | Purpose |
|---|---|---|
| POST | /api/public/v1/plugin/licenses/activate | Connect a WordPress site with a license key. |
| POST | /api/public/v1/plugin/free/register | Connect a WordPress site on the free plan. |
| POST | /api/public/v1/plugin/licenses/validate | Revalidate a connection and read authoritative limits. |
| POST | /api/public/v1/plugin/licenses/deactivate | Disconnect a WordPress site. |
| POST | /api/public/v1/plugin/managed/chat | Ask a visitor question through Managed AI (signed). |
| POST | /api/public/v1/plugin/heartbeat | Report plugin health. |
| POST | /api/public/v1/plugin/usage | Report display metrics. |
| POST | /api/public/v1/licenses/verify | Check license state. |
| GET | /api/public/v1/system/health | Read system health. |
4. Handle stable errors
Branch on the error code and retain the request identifier when contacting support.
{
"error": {
"code": "LICENSE_INVALID",
"message": "That license key was not recognised.",
"request_id": "req_..."
}
}