NetSendo v2.4.0: GOLD Features Are Now Licence-Enforced
If you run NetSendo on your own server, you need to know exactly which features you're entitled to and what happens when a licence ends. Until now that wasn't clear in the software. The only GOLD limit the app actually checked was the Campaign Architect cap (3 plans on SILVER). A/B tests, auto and hybrid webinars, and OpenRouter/Ollama worked on every installation, with or without a licence.
NetSendo v2.4.0 changes that. The GOLD plan sold on netsendo.com is now checked consistently across the server, the panel, the public API, MCP and NetSendo Brain. You get one central licensing layer, clear upgrade prompts in the interface, and a documented 402 Payment Required response for integrations. Most importantly, nothing is deleted when a licence ends.
code: gold_required. Running tests finish, registered webinar attendees still get their sessions, and your data stays untouched. If you rely on these features, check your licence before you upgrade.
๐ What's New in v2.4.0
One Licensing Layer
All GOLD checks run through App\Licensing\Feature and LicenseService.
Consistent Everywhere
The panel, the public API, MCP and Brain all apply the same rules.
GOLD-Aware UI
Badges, notices and an upgrade dialog replace silent failures.
No Data Loss
When a licence ends, your existing work is kept (EULA ยง5.5).
Which Features Now Require GOLD
- A/B tests: You can't create, edit, add variants to, start or resume a test without GOLD. This applies to the
ab-tests.*routes,POST/PUT /api/v1/ab-tests,.../variantsand.../start. It also covers messages saved withab_test_config(refused before anything is saved) and Brain'screate_ab_test/start_ab_teststeps. If a message with a draft test starts sending without GOLD, the test is cancelled and the message goes out as written. - Auto and hybrid webinars: You can't create or copy them, save the schedule or chat (
webinars.auto.schedule|import-chat|generate-chat|convert), or edit chat scripts in the scenario builder. Without GOLD, these webinars stop accepting new registrations (Webinar::canRegister()). - OpenRouter and Ollama: You can't add them in AI settings, and every call through them is refused. Wherever the app picks an AI integration (default integration, model list, Brain, Campaign Auditor, CardIntel, template AI), it now uses
AiIntegration::usable(). Without GOLD, it falls back to OpenAI, Anthropic, Gemini or Grok.
What Keeps Working After GOLD Ends
โน๏ธ Note: Nothing is deleted. Tests that are already running finish and send the winner. You can still view results, pause tests, pick a winner and delete tests. People already registered for an auto-webinar still get their session, and auto-webinar settings stay readable. A message whose test already ran can still be edited, and you can still edit or remove an existing OpenRouter/Ollama integration.
How Refusals Look to API Clients
A refused feature throws App\Licensing\FeatureRequiresGold. Public API and JSON calls get a 402 Payment Required response with the fields code, feature, required_plan and upgrade_url. Here's an illustrative example (the exact values may differ):
{
"code": "gold_required",
"feature": "ab_tests",
"required_plan": "GOLD",
"upgrade_url": "https://..."
}
MCP shows the response's message. Inertia page visits return with a gold_required error and a flash message.
For Developers: Gating Your Own Routes
The GOLD feature keys are unlimited_ai_campaigns, advanced_ai, ab_tests, auto_webinars and hybrid_webinars. You can protect routes with the licensed:<feature> middleware and check features in code with LicenseService::allows(), ensureAllows() or features():
// Illustrative usage
Route::post('/ab-tests', [AbTestController::class, 'store'])
->middleware('licensed:ab_tests');
if ($licenseService->allows('auto_webinars')) {
// GOLD-only logic
}
On the frontend, every page receives license.features as a shared Inertia prop. The new useLicense() composable gives you can('ab_tests') and requireGold(). You can also use the GoldBadge, GoldNotice and UpgradeModal components. The modal also opens when an axios call gets a 402 response.
๐ผ Benefits & Use Cases
- Clear, predictable rules about which features your plan includes
- A machine-readable 402 response instead of vague errors
- Running campaigns finish cleanly even after a licence expires
- Interface texts in English, Polish, German and Spanish
E-commerce: Subject-Line Testing
A store owner on GOLD A/B tests subject lines for abandoned-cart and post-purchase emails. If the licence lapses during a test:
- The running test finishes and sends the winning variant
- Results stay available for review
- Draft tests are cancelled, and the message goes out as written instead of failing
SaaS: Evergreen Onboarding Webinars
A SaaS team uses an auto-webinar for onboarding. Without GOLD the webinar stops accepting new sign-ups, but everyone already registered still gets their session. That leaves the team time to renew without letting down users who signed up.
Agencies: Integrations That Handle Refusals
An agency automates client campaigns through the API and n8n. With the 402 gold_required response, workflows can check for this case, notify the account owner and skip the gated step instead of failing.
๐ ๏ธ Step-by-Step: Upgrading to v2.4.0
- Check your licence first
Before you upgrade, confirm your licence plan and expiry date in the NetSendo panel. If you use A/B tests, auto/hybrid webinars or OpenRouter/Ollama, make sure your GOLD licence is active.
- List what you depend on
Write down your draft A/B tests, auto-webinars that accept registrations, and any Brain tasks set to use OpenRouter or Ollama models. These are the places where you'll see a change.
- Update your installation
Follow the upgrade instructions in the documentation. For a typical Docker setup:
docker compose pull docker compose up -d - Review your AI settings
Without GOLD, AI uses OpenAI, Anthropic, Gemini or Grok instead of OpenRouter/Ollama. Make sure at least one of these is configured, or AI features won't have a provider.
- Update your API clients
Handle HTTP 402 in scripts and integrations that call
/api/v1/ab-testsor send messages withab_test_config.
โ ๏ธ Common pitfall: A message saved through the API with ab_test_config is refused completely without GOLD, and nothing is saved. If you want the message to go out anyway, have your client retry without the A/B config.
๐ Fixes & Smaller Changes
- Campaign Architect messages are translated: the limit dialog no longer prints
:limitliterally, and the plan counter and the 403 response no longer show raw translation keys (en, pl, de, es). - Default AI integration fix:
AiService::getDefaultIntegrationcould pick an inactive Ollama integration because anorWherecondition wasn't grouped. - Faster licence checks:
LicenseServicenow reads the plan in one database query instead of four. - Test coverage:
GoldFeatureGatingTestadds 24 tests covering SILVER, GOLD and expired GOLD for each feature.
๐ฏ Expert Tips
In API clients, check for code: gold_required instead of treating every 402 the same. Log the feature field so you know what was refused.
Even on GOLD, configure an OpenAI, Anthropic, Gemini or Grok integration. AI features keep working if your licence lapses.
can() in custom UIIf you extend the panel, hide or lock GOLD controls with useLicense().can() so users don't run into errors.
Running tests finish after a licence ends, but new tests and webinar registrations stop right away. Renewing before the expiry date avoids any gap.
โ Conclusion
In v2.4.0, the GOLD features you pay for are now actually checked by the app. A/B tests, auto/hybrid webinars and OpenRouter/Ollama require an active GOLD licence. The same rules apply in the panel, the API, MCP and Brain, and refusals are clear in both the UI and API responses. Your data stays untouched, and anything already running finishes properly. Check your licence, update your API clients, and then upgrade.
Ready to Upgrade?
Read the release notes, check the docs, and update your self-hosted NetSendo:
See the full changelog on GitHub. If NetSendo helps you, give it a โญ on GitHub!

