Trading indicators & strategies
License your trading indicators and strategies
Lock each activation to a trading account or computer. One REST call in your indicator’s initialization is all it takes — payments, fulfillment, and subscription lifecycle are handled for you. Works with NinjaTrader, MetaTrader, TradeStation, and more.
Step-by-step integration guide// NinjaTrader 8 runs .NET Framework 4.8: plain HttpClient + Newtonsoft.Json
// First run: call /v1/license/activate once with a saved GUID (see the guide)
private bool licensed = true; // OnBarUpdate returns early when false
protected override void OnStateChange()
{
if (State == State.Configure)
CheckLicense(); // async, never blocks the chart
}
private async void CheckLicense()
{
try
{
using (var http = new HttpClient())
{
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", PLUGIN_API_KEY);
var body = new JObject {
{ "license_key", LicenseKey }, // from indicator settings
{ "plugin_slug", "my-indicator" },
};
var res = await http.PostAsync(
"https://api.licensr.app/v1/license/validate",
new StringContent(body.ToString(),
Encoding.UTF8, "application/json"));
var valid = JObject.Parse(
await res.Content.ReadAsStringAsync())["valid"];
if (valid != null && valid.Type == JTokenType.Boolean
&& !valid.Value<bool>())
{
licensed = false;
Print("License invalid or expired.");
}
}
}
catch (Exception) { } // no answer: keep the previous state
}Compatible trading platforms
Why Licensr for trading platform plugins
Independent of any trading platform vendor program
NinjaTrader's built-in vendor system requires partnership approval and ties licenses to their servers. Licensr is fully independent and works on NinjaTrader, MetaTrader, TradeStation, or any platform that runs C# or HTTP.
Per-account or per-computer seats
Each seat binds to one identifier: the MetaTrader account number, or on NinjaTrader and cTrader a random ID saved once on the computer. Sharing the key with another account or machine hits the seat cap.
Payments and fulfillment in one
Your indicator has its own buy page at /buy/your-slug. The customer pays via Stripe, the license key is issued and emailed automatically. No Gumroad, no marketplace fees, no manual fulfillment.
Subscription lifecycle handled automatically
Monthly, quarterly, or annual billing runs on Stripe. When a subscription lapses, the validate call returns false, and the indicator disables itself on its next daily check without any extra code from you.
Instant revocation for refunds and chargebacks
Revoke from the dashboard in one click. The next validation tick blocks access immediately. You don't need to wait for a subscription to expire or touch the customer's machine.
Official SDK
Official C# SDK for .NET 5+ trading hosts
dotnet add package Licensr.Sdk. Async ValidateAsync / ActivateAsync with System.Text.Json source generation. Works in .NET 5+ hosts such as cTrader; NinjaTrader 8 runs .NET Framework 4.8, so NinjaScript uses plain REST calls instead.
using Licensr.Sdk;
var client = new LicensrClient(new() {
ApiKey = "pk_live_...",
PluginSlug = "my-synth",
});
var result = await client.ValidateAsync(new() {
LicenseKey = userKey,
});
if (result.Valid) UnlockFullFeatures();
// → Valid = true, Entitlement = Full,
// FeatureFlags = { "auto_backup": true }Start selling your trading indicator today.
Free tier available. From signup to a live buy page in 15 minutes. No marketplace, no revenue share.

