Integrations

Settings reference

/_authed/settings has five tabs: General, Network, SSH Banner, Subscription, System. Everything is staged into local state from api.settings.get() and applied together via Apply all settings (api.settings.save(f)), though several cards also have their own inline Save. SSH Banner has its own dedicated page.
FieldMeaningDefaultEffect
domain / portDefault host used for every protocol unless overridden; primary HTTPS port.Panel cert is always a single-domain HTTP-01 challenge against this domain.
panelDataLimitGiBPanel-wide traffic soft limit.0 (unmetered)Raises a panel alert only; not an enforcement cap.
timezoneIANA timezone name.UTCControls display of dates/expiry/logs/charts in the admin panel; storage stays UTC. Live preview via Intl.DateTimeFormat.
contactTelegram / contactWhatsappContact links.Shown to users on the public account status page and the panel's Build info header.
Official repository linkSource repo reference.lockedNon-editable, shows a Locked badge — updates only via autoscript update against the official repo.
trialsEnabledEnables free trial accounts.offOne free account per Telegram user, auto-deleted at expiry.
trialDurationHoursTrial length.1How long a trial account remains active.
trialQuotaGbTrial data cap.10 (0 = unlimited)Data quota applied to trial accounts.

Free trials card placement

The Free trials card is technically nested back under the General tab content in the source (appearing after SSH Banner content due to a duplicate TabsContent value="general"), but it renders as part of General in the UI.
FieldMeaningDefaultEffect
directDomain / directPortThe single domain serving the panel, API, auth, and server functions with caching disabled.directPort: 443This is the DNS-only (non-proxied) domain used for panel/API traffic.
Cloudflare API tokenZone → DNS → Edit scope token.Used for automated DNS record management / cert issuance. Masked password input.
tlsPortsCloudflare-friendly TLS port set.443, 2053, 2083, 2087, 2096, 8443Multi-select list of ports usable for protocol endpoints proxied through Cloudflare (CDN).
plainPortsCloudflare-friendly plain-HTTP port set.80, 8080, 8880, 2052, 2082, 2086, 2095Multi-select list of ports for nTLS/plain endpoints.
autoSuspendAutomatic enforcement toggle.Checked every 60 seconds; locks accounts past expiry or over quota.
ipLimitActionIP limit enforcement policy.warn = kill extra connections + Telegram warning only; suspend = instant lock on first violation; warning_suspend = N warnings then suspend.
ipLimitMaxWarningsWarning count before suspend.2 (range 1–10)Only used when ipLimitAction = warning_suspend.
ipLimitGraceTimeMinsCooldown between counted strikes.60 (range 0–1440)Prevents rapid repeated violations from over-counting.
ZIVPN obfuscation keyRotate/view via ZivpnObfsCard.Managed through getZivpnObfs / setZivpnObfs / rotateZivpnObfs in src/lib/zivpn-obfs-store.

The IP Limit Enforcement Policy has its own Apply IP Policy button, which still calls the same underlying save mutation as the rest of Settings.

Controls the "one URL adapts to any client" subscription link feature — works with v2rayNG, Clash Meta, sing-box, Hiddify and similar clients via User-Agent sniffing.

FieldMeaningDefaultEffect
subscriptionEnabledMaster switch for public subscription pages.trueWhen off, every /sub/{token} link shows a friendly "disabled" notice instead of configs.
subscriptionTitleProfile title shown to clients.GRVPNCosmetic label in the subscription profile.
subscriptionUpdateHoursUpdate interval.12 (range 1–720)How often clients are told to refetch the subscription.
subscriptionSupportUrlSupport link.Optional support link shown on the subscription page.
subscriptionLandingUrlCustom landing page.Used instead of the built-in landing page when a user opens the sub link in a browser.
supportBotUsername / supportBotTokenDuplicated support-bot fields.maskedThe /sub page's Support button deep-links here; typing the literal word "clear" removes a saved token; empty reuses the main bot.
subscriptionPublicDomain / Port / PathDedicated subscription host.port 443, path /subServes /sub/{token} on a separate domain from the panel.
Generate certificateapi.settings.issueSubscriptionCert()Requests a TLS cert for the public subscription domain; on failure the panel keeps serving the old domain (non-destructive). subscriptionCertStatus shows the last result/error.
subscriptionIncludeUsageHeader toggle.trueIncludes usage figures in the subscription header.
subscriptionIncludeExpiryHeader toggle.trueIncludes expiry date in the subscription header.
subscriptionShowRawBrowser landing page toggle.falseWhen off, browsers only see account info while VPN apps still import configs normally via the same link.

Read-only system info

Hostname / IPv4
From api.system.status() (s?.hostname, s?.ipv4).
DB path
f.dbPath — location of the panel database.
Agent address
Hardcoded display 127.0.0.1:8088 — where the local Python agent process listens.

Change admin password

Current password + New password fields, submitted via api.settings.changePassword(current, next) — this is the credential used on the panel Login page. There is no other way to change this password in this codebase.

Other system controls

  • Service restarts via api.system.restartService(svc).
  • Xray version management via api.xray.versions() / installNodeXrayVersion, including a bulk "Apply Xray version to all nodes" flow with per-node results and an admin notification on completion.