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
| Use | Example |
|---|---|
| Settings that follow the customer | theme = dark, language = de, config = {…json…}: a new PC starts the way the old one was set |
| Progress and counters | runs = 150, level = 3, last_export = 2026-10-13 |
| Flags | agreed_terms = 1, seen_intro = 1: the program shows something once |
| Values you set for one customer | tier = 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
In your program
With the .NET package (C# and VB.NET), after LoginAsync or AccountLoginAsync:
' 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")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
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
| Code | Means |
|---|---|
SESSION_EXPIRED | No live session: sign in first A banned, paused or expired key gets nothing, as with texts |
INVALID_NAME | The name has other characters, or is longer than 64 |
VALUE_TOO_LONG | The value is over 4 KB |
TOO_MANY_VARS | The customer already has 50 variables; delete one first |
Something missing or unclear? Tell us on Telegram