[{"data":1,"prerenderedAt":466},["ShallowReactive",2],{"docs-admin\u002Flicensing":3,"navigation":327,"docs-surround-admin\u002Flicensing":461},{"id":4,"title":5,"body":6,"description":16,"extension":320,"meta":321,"navigation":322,"path":323,"seo":324,"stem":325,"__hash__":326},"docs\u002F2.admin\u002F12.licensing.md","Licensing & Purchasing",{"type":7,"value":8,"toc":313},"minimark",[9,13,17,41,56,67,72,79,180,183,186,190,205,233,241,245,252,258,283,296],[10,11,5],"h1",{"id":12},"licensing-purchasing",[14,15,16],"p",{},"There are two kinds of licence on a udServer, and they are easy to confuse:",[18,19,20,35],"ul",{},[21,22,23,24,28,29,34],"li",{},"The ",[25,26,27],"strong",{},"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 ",[30,31,33],"a",{"href":32},"server-configuration","Server Configuration"," page.",[21,36,37,40],{},[25,38,39],{},"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.",[14,42,23,43,46,47,51,52,55],{},[25,44,45],{},"Licensing"," page in the ",[30,48,50],{"href":49},"admin-console","Admin console"," covers the second kind: what may be sold, at what price, and how many seats exist. It requires the ",[25,53,54],{},"Server Config"," global permission.",[14,57,58,59,62,63,34],{},"Day-to-day seat management belongs to the organisations themselves — see the user guide's ",[30,60,45],{"href":61},"\u002Fdocs\u002Fuser\u002Flicensing"," page. An administrator can step in from the ",[30,64,66],{"href":65},"users-and-organisations#organisations","Organisations",[68,69,71],"h2",{"id":70},"purchasing","Purchasing",[14,73,74,75,78],{},"With purchasing enabled, an organisation member holding ",[25,76,77],{},"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.",[80,81,82,95],"table",{},[83,84,85],"thead",{},[86,87,88,92],"tr",{},[89,90,91],"th",{},"Setting",[89,93,94],{},"Description",[96,97,98,109,131,141,160,170],"tbody",{},[86,99,100,106],{},[101,102,103],"td",{},[25,104,105],{},"Allow purchasing",[101,107,108],{},"Master switch. Off means the purchase controls do not appear anywhere.",[86,110,111,116],{},[101,112,113],{},[25,114,115],{},"Currency",[101,117,118,119,123,124,123,127,130],{},"Lowercase three-letter ISO 4217 code — ",[120,121,122],"code",{},"usd",", ",[120,125,126],{},"aud",[120,128,129],{},"eur"," — used for every purchase on the server.",[86,132,133,138],{},[101,134,135],{},[25,136,137],{},"Stripe publishable key",[101,139,140],{},"The public key from your Stripe dashboard.",[86,142,143,148],{},[101,144,145],{},[25,146,147],{},"Stripe secret key",[101,149,150,151,155,156,159],{},"The secret key. Never returned by the server, so the field shows ",[152,153,154],"em",{},"Configured"," or ",[152,157,158],{},"Not configured"," rather than a value. Leave it blank to keep the stored key.",[86,161,162,167],{},[101,163,164],{},[25,165,166],{},"Stripe webhook signing secret",[101,168,169],{},"Used to verify that a webhook really came from Stripe. Same blank-to-keep behaviour.",[86,171,172,177],{},[101,173,174],{},[25,175,176],{},"Stripe webhook endpoint",[101,178,179],{},"Read-only. The URL to register as a webhook endpoint in your Stripe dashboard.",[14,181,182],{},"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.",[14,184,185],{},"Changing the currency does not convert existing prices; it changes the code the prices are charged in. Set prices after settling on a currency.",[68,187,189],{"id":188},"products","Products",[14,191,192,193,196,197,200,201,204],{},"Each tier and add-on is listed with a ",[25,194,195],{},"price",", a ",[25,198,199],{},"cap"," and a ",[25,202,203],{},"consumed"," count.",[18,206,207,217,227],{},[21,208,209,212,213,216],{},[25,210,211],{},"Price"," is per seat, in the currency above. Setting a price is what offers a product for sale; leaving it blank or ",[120,214,215],{},"0"," hides it from checkout while leaving it assignable from allocations an administrator creates.",[21,218,219,222,223,226],{},[25,220,221],{},"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 ",[25,224,225],{},"zero",", not unlimited — unlimited requires the license to name the product explicitly.",[21,228,229,232],{},[25,230,231],{},"Consumed"," is how many seats have been allocated across all organisations, purchased ones included.",[14,234,235,236,240],{},"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 ",[30,237,239],{"href":238},"\u002Fdocs\u002Fuser\u002Flicensing#tiers-and-add-ons","user licensing guide",".",[68,242,244],{"id":243},"legacy-licensing","Legacy Licensing",[14,246,247,248,251],{},"Per-user licensing arrived after this server may already have been in service, so there is a transitional fallback. While the ",[120,249,250],{},"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.",[14,253,23,254,257],{},[25,255,256],{},"Legacy licensing"," section is how you get off it safely:",[18,259,260,266,272],{},[21,261,262,265],{},[25,263,264],{},"Legacy fallback"," reports whether the setting is on.",[21,267,268,271],{},[25,269,270],{},"Legacy license fallbacks"," counts the sessions served by the fallback since the server last started. Once that stops climbing, nothing is relying on it.",[21,273,274,275,278,279,282],{},"The report lists ",[25,276,277],{},"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. ",[25,280,281],{},"Active within"," sets how far back \"recently\" reaches.",[14,284,285,286,292,293,295],{},"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 ",[30,287,289],{"href":288},"\u002Fdocs\u002Fdev\u002FudServerAPI#server-configuration",[120,290,291],{},"\u002F_config\u002Fmodify"," with ",[120,294,250],{},", which makes it a considered change rather than a stray click.",[14,297,298,299,312],{},"For the underlying APIs, see ",[30,300,302,123,305,308,309],{"href":301},"\u002Fdocs\u002Fdev\u002FudServerAPI#server-license-administration",[120,303,304],{},"\u002F_admin\u002Flicenses\u002Foverview",[120,306,307],{},"\u002F_admin\u002Flicenses\u002Fpricing\u002Fset"," and ",[120,310,311],{},"\u002F_admin\u002Flicenses\u002Flegacyreport"," in the developer guide.",{"title":314,"searchDepth":315,"depth":315,"links":316},"",2,[317,318,319],{"id":70,"depth":315,"text":71},{"id":188,"depth":315,"text":189},{"id":243,"depth":315,"text":244},"md",{},true,"\u002Fadmin\u002Flicensing",{"title":5,"description":16},"2.admin\u002F12.licensing","sD3118DnTZmCbj7SXmGw2trTVI44xNZ8ABZPc5oVYt4",[328,332,390,448],{"title":329,"path":330,"stem":331},"udServer Manuals","\u002F","0.index",{"title":333,"path":334,"stem":335,"children":336},"User Guide","\u002Fdocs\u002Fuser","1.user\u002F0.index",[337,341,345,349,353,357,359,362,366,370,374,378,382,386],{"title":338,"path":339,"stem":340},"Login","\u002Fdocs\u002Fuser\u002Flogin","1.user\u002F1.login",{"title":342,"path":343,"stem":344},"Account Settings","\u002Fdocs\u002Fuser\u002Faccount-settings","1.user\u002Faccount-settings",{"title":346,"path":347,"stem":348},"Files","\u002Fdocs\u002Fuser\u002Ffiles","1.user\u002Ffiles",{"title":350,"path":351,"stem":352},"Jobs","\u002Fdocs\u002Fuser\u002Fjobs","1.user\u002Fjobs",{"title":354,"path":355,"stem":356},"3rd Party Licenses","\u002Fdocs\u002Fuser\u002Flicenses","1.user\u002Flicenses",{"title":45,"path":61,"stem":358},"1.user\u002Flicensing",{"title":66,"path":360,"stem":361},"\u002Fdocs\u002Fuser\u002Forganisations","1.user\u002Forganisations",{"title":363,"path":364,"stem":365},"Permissions","\u002Fdocs\u002Fuser\u002Fpermissions","1.user\u002Fpermissions",{"title":367,"path":368,"stem":369},"Connecting an Azure Blob Container to a Project","\u002Fdocs\u002Fuser\u002Fproject-azure-setup","1.user\u002Fproject-azure-setup",{"title":371,"path":372,"stem":373},"Connecting an AWS S3 Bucket to a Project","\u002Fdocs\u002Fuser\u002Fproject-s3-setup","1.user\u002Fproject-s3-setup",{"title":375,"path":376,"stem":377},"Projects","\u002Fdocs\u002Fuser\u002Fprojects","1.user\u002Fprojects",{"title":379,"path":380,"stem":381},"Scenes","\u002Fdocs\u002Fuser\u002Fscenes","1.user\u002Fscenes",{"title":383,"path":384,"stem":385},"Software Downloads","\u002Fdocs\u002Fuser\u002Fsoftware","1.user\u002Fsoftware",{"title":387,"path":388,"stem":389},"Work Items","\u002Fdocs\u002Fuser\u002Fworkitems","1.user\u002Fworkitems",{"title":391,"path":392,"stem":393,"children":394},"IT Administrators Guide","\u002Fdocs\u002Fadmin","2.admin\u002F0.index",[395,399,403,407,409,413,417,421,425,429,433,436,440,444],{"title":396,"path":397,"stem":398},"System Requirements","\u002Fdocs\u002Fadmin\u002Fsystem-requirements","2.admin\u002F1.system-requirements",{"title":400,"path":401,"stem":402},"Publishing Software (Packages)","\u002Fdocs\u002Fadmin\u002Fsoftware-packages","2.admin\u002F10.software-packages",{"title":404,"path":405,"stem":406},"Legal Documents","\u002Fdocs\u002Fadmin\u002Flegal-documents","2.admin\u002F11.legal-documents",{"title":5,"path":408,"stem":325},"\u002Fdocs\u002Fadmin\u002Flicensing",{"title":410,"path":411,"stem":412},"Egress","\u002Fdocs\u002Fadmin\u002Fegress","2.admin\u002F13.egress",{"title":414,"path":415,"stem":416},"Backups & Restore","\u002Fdocs\u002Fadmin\u002Fbackups","2.admin\u002F14.backups",{"title":418,"path":419,"stem":420},"Generic Installation","\u002Fdocs\u002Fadmin\u002Fgettingstarted","2.admin\u002F2.gettingstarted",{"title":422,"path":423,"stem":424},"Setting up on an Amazon EC2 instance","\u002Fdocs\u002Fadmin\u002Famazon-ec2","2.admin\u002F3.amazon-ec2",{"title":426,"path":427,"stem":428},"Configuring OAuth \u002F OIDC Authentication","\u002Fdocs\u002Fadmin\u002Foauth","2.admin\u002F4.oauth",{"title":430,"path":431,"stem":432},"Admin Console","\u002Fdocs\u002Fadmin\u002Fadmin-console","2.admin\u002F5.admin-console",{"title":33,"path":434,"stem":435},"\u002Fdocs\u002Fadmin\u002Fserver-configuration","2.admin\u002F6.server-configuration",{"title":437,"path":438,"stem":439},"Users & Organisations","\u002Fdocs\u002Fadmin\u002Fusers-and-organisations","2.admin\u002F7.users-and-organisations",{"title":441,"path":442,"stem":443},"Analytics & System Log","\u002Fdocs\u002Fadmin\u002Fanalytics-and-logs","2.admin\u002F8.analytics-and-logs",{"title":445,"path":446,"stem":447},"Webhooks","\u002Fdocs\u002Fadmin\u002Fwebhooks","2.admin\u002F9.webhooks",{"title":449,"path":450,"stem":451,"children":452},"Developers Guide","\u002Fdocs\u002Fdev","3.dev\u002F0.index",[453,457],{"title":454,"path":455,"stem":456},"udServer API","\u002Fdocs\u002Fdev\u002Fudserverapi","3.dev\u002FudServerAPI",{"title":458,"path":459,"stem":460},"WebSocket API","\u002Fdocs\u002Fdev\u002Fwebsocketapi","3.dev\u002Fwebsocketapi",[462,464],{"title":404,"path":463,"stem":406,"children":-1},"\u002Fadmin\u002Flegal-documents",{"title":410,"path":465,"stem":412,"children":-1},"\u002Fadmin\u002Fegress",1787483255452]