User variables

Small values your program keeps on the server for each customer: settings, progress, flags

A user variable is a small value your program keeps on the PWF Auth server for one customer: a setting, a theme, a counter, a flag, a piece of saved state The program writes it after sign-in and reads it back next time, on this PC or on a new one You need no server of your own for it, and you can see and change every value in the panel

What it is good for

UseExample
Settings that follow the customertheme = dark, language = de, config = {…json…}: a new PC starts the way the old one was set
Progress and countersruns = 150, level = 3, last_export = 2026-10-13
Flagsagreed_terms = 1, seen_intro = 1: the program shows something once
Values you set for one customertier = vip, max_threads = 8: type it in the panel, the program reads it on its next start

A variable belongs to one customer of one app: a licence key, or a customer account Nobody else's program can read it For a value every copy should read, use Texts instead

In the panel

Open a key in Licences or an account in Users: the side panel has a Variables section with every name and value, when it last changed and who changed it (the app, or you) Change a value and press Save, remove one with , or add a new one at the bottom What you do there is in the key's activity; what the program does is not

Each customer can have up to 50 variables, each value up to 4 KB of text A name is letters, digits, "_", "." or "-", up to 64 characters Deleting the key or the account deletes its variables

In your program

With the .NET package (C# and VB.NET), after LoginAsync or AccountLoginAsync:

VB.NET
' save a setting on the server
Await client.SetVariableAsync("theme", "dark")

' read it back: Nothing when it was never set
Dim theme = Await client.GetVariableAsync("theme")
If theme Is Nothing Then theme = "light"

' everything at once
Dim all = Await client.GetVariablesAsync()      ' Dictionary(Of String, String)

' forget one
Await client.DeleteVariableAsync("seen_intro")
C#
await client.SetVariableAsync("runs", (runs + 1).ToString());
string? tier = await client.GetVariableAsync("tier");       // null when not set
IReadOnlyDictionary<string, string> all = await client.GetVariablesAsync();

The Python package has set_variable, get_variable, get_variables and delete_variable Any other client calls POST /api/auth/var.php (see the API reference): the same encrypted envelope as the heartbeat, with the session_id

A value is text Keep numbers as strings and parse them; keep structured data as JSON in one variable rather than many small ones

From your own scripts

The Developer API reads and writes a key's variables too: GET /keys/{key}/vars, PUT /keys/{key}/vars/{name} with {"value": "…"}, DELETE /keys/{key}/vars/{name} Your store or bot can set tier when an order is paid, and the program reads it on its next start

What is refused

CodeMeans
SESSION_EXPIREDNo live session: sign in first A banned, paused or expired key gets nothing, as with texts
INVALID_NAMEThe name has other characters, or is longer than 64
VALUE_TOO_LONGThe value is over 4 KB
TOO_MANY_VARSThe customer already has 50 variables; delete one first

Something missing or unclear? Tell us on Telegram