Licensing & Purchasing
There are two kinds of licence on a udServer, and they are easy to confuse:
- The server license is what entitles this installation to run. It carries the user, session and shard limits and the licensed domains, and it is applied on the Server Configuration page.
- User licences are per-person seats — tiers and add-ons — held by organisations and assigned to their members. They are what let someone use udStream and the udSDK products against this server.
The Licensing page in the Admin console covers the second kind: what may be sold, at what price, and how many seats exist. It requires the Server Config global permission.
Day-to-day seat management belongs to the organisations themselves — see the user guide's Licensing page. An administrator can step in from the Organisations page.
Purchasing
With purchasing enabled, an organisation member holding Purchase Licenses can buy seats from their own organisation's Licenses page through Stripe checkout. Without it, seats reach an organisation only when an administrator allocates them.
| Setting | Description |
|---|---|
| Allow purchasing | Master switch. Off means the purchase controls do not appear anywhere. |
| Currency | Lowercase three-letter ISO 4217 code — usd, aud, eur — used for every purchase on the server. |
| Stripe publishable key | The public key from your Stripe dashboard. |
| Stripe secret key | The secret key. Never returned by the server, so the field shows Configured or Not configured rather than a value. Leave it blank to keep the stored key. |
| Stripe webhook signing secret | Used to verify that a webhook really came from Stripe. Same blank-to-keep behaviour. |
| Stripe webhook endpoint | Read-only. The URL to register as a webhook endpoint in your Stripe dashboard. |
The webhook is not optional. A checkout completes at Stripe, and it is the webhook that tells udServer to turn that payment into seats — without it, purchases are taken and no seats appear. Register the endpoint shown here, and paste its signing secret back into the field above.
Changing the currency does not convert existing prices; it changes the code the prices are charged in. Set prices after settling on a currency.
Products
Each tier and add-on is listed with a price, a cap and a consumed count.
- Price is per seat, in the currency above. Setting a price is what offers a product for sale; leaving it blank or
0hides it from checkout while leaving it assignable from allocations an administrator creates. - Cap is the server-wide seat limit for that product, and it comes from the signed server license rather than from this page. A product the license does not mention is capped at zero, not unlimited — unlimited requires the license to name the product explicitly.
- Consumed is how many seats have been allocated across all organisations, purchased ones included.
Tiers are cumulative — each includes the ones below it — and add-ons extend whatever tier a member already holds. The tiers and add-ons themselves are described in the user licensing guide.
Legacy Licensing
Per-user licensing arrived after this server may already have been in service, so there is a transitional fallback. While the uselegacylicenses server setting is on, a user holding no licence at all still receives the old premium response, exactly as before — which means nobody loses access on the day licensing is switched on, and equally that nobody notices they were never licensed.
The Legacy licensing section is how you get off it safely:
- Legacy fallback reports whether the setting is on.
- Legacy license fallbacks counts the sessions served by the fallback since the server last started. Once that stops climbing, nothing is relying on it.
- The report lists recently-active users who currently hold no licence — the people who would lose premium the moment you turn it off — with the organisations each belongs to. Active within sets how far back "recently" reaches.
Work through that list first: get those users licensed, or accept that they lose premium, and only then turn the setting off. There is deliberately no switch for it on this page — it is set through /_config/modify with uselegacylicenses, which makes it a considered change rather than a stray click.
For the underlying APIs, see /_admin/licenses/overview, /_admin/licenses/pricing/set and /_admin/licenses/legacyreport in the developer guide.