Supported Headers
When Prizrak-Box fetches a remote subscription, it reads specific HTTP response headers from the server. These headers let subscription providers control profile metadata, traffic display, automatic updates, logo, announcements, and more.
Headers are case-insensitive. Unknown headers are silently ignored.
Profile Metadata
Section titled “Profile Metadata”Profile-Title 
The display name for the subscription in Prizrak-Box.
![]()
| Property | Value |
|---|---|
| Type | string |
| Encoding | Plain UTF-8 or Base64 (base64: prefix) |
Example:
Profile-Title: My VPN SubscriptionProfile-Title: base64:TXkgVlBOIFN1YnNjcmlwdGlvbg==If Profile-Title is absent, the app falls back to the filename from the Content-Disposition header, then to a generated name like Sub-2024-01-01.
Profile-Logo
URL of an image to use as the subscription logo in the app.
![]()
| Property | Value |
|---|---|
| Type | string (URL) |
| Supported formats | PNG, SVG |
| Max file size | 2 MB |
| Allowed schemes | http, https |
Example:
Profile-Logo: https://example.com/logo.pngThe logo is downloaded at fetch time and cached locally. An empty or invalid URL clears the cached logo.
Content-Disposition 
Used as a fallback source for the profile title when Profile-Title is absent.
| Property | Value |
|---|---|
| Type | string |
| Parsed field | filename parameter |
Example:
Content-Disposition: attachment; filename="my-vpn.yaml"The filename value (without extension) becomes the profile title if Profile-Title is not set.
Traffic Information
Section titled “Traffic Information”Subscription-Userinfo 
Reports traffic usage statistics displayed in the profile card.
![]()
| Property | Value |
|---|---|
| Type | string (semicolon-separated key=value pairs) |
| Fields | upload, download, total, expire |
| Units | Bytes (for traffic fields), Unix timestamp (for expire) |
Example:
Subscription-Userinfo: upload=1073741824; download=5368709120; total=107374182400; expire=1893456000| Field | Description |
|---|---|
upload | Bytes uploaded |
download | Bytes downloaded |
total | Total traffic quota in bytes |
expire | Expiry time as Unix timestamp |
Update Settings
Section titled “Update Settings”Profile-Update-Interval 
Sets the automatic refresh interval for this subscription.
| Property | Value |
|---|---|
| Type | integer |
| Unit | Hours |
Example:
Profile-Update-Interval: 24When this header is present, Prizrak-Box automatically re-fetches the subscription at the specified interval in hours.
Profile-Web-Page-Url 
A URL for the subscription provider’s home page or portal.
| Property | Value |
|---|---|
| Type | string (URL) |
Example:
Profile-Web-Page-Url: https://myvpn.example.comDisplayed in the profile detail view as a tappable link.
Support-Url 
A support or contact URL (e.g. Telegram channel, help desk).
| Property | Value |
|---|---|
| Type | string (URL) |
Example:
Support-Url: https://t.me/myvpn_supportDisplayed alongside the profile for users to reach support.
Announcements
Section titled “Announcements”Announce 
A text announcement displayed in the app as a banner on the profile card.
![]()
| Property | Value |
|---|---|
| Type | string |
| Max length | 200 characters |
| Encoding | Plain UTF-8 or Base64 (base64: prefix) |
Examples:
Announce: Maintenance scheduled for Saturday 02:00–04:00 UTCAnnounce: base64:TWFpbnRlbmFuY2Ugc2NoZWR1bGVkAnnounce-Url
A URL linked from the announcement banner.
| Property | Value |
|---|---|
| Type | string (URL) |
Example:
Announce-Url: https://status.myvpn.example.comTapping the announcement banner in the app opens this URL.
URL Migration & Fallback
Section titled “URL Migration & Fallback”These headers implement subscription URL migration — allowing providers to move subscriptions to a new address without users manually updating their URL.
new-url
Instructs the client to replace the entire subscription URL with a new one.
| Property | Value |
|---|---|
| Type | string (full URL) |
| Priority | Highest — takes precedence over new-domain |
| Hops | Max 3 consecutive migrations |
Example:
new-url: https://new.example.com/subscription/abc123After receiving this header, Prizrak-Box immediately saves the new URL and re-fetches from it. The original URL is replaced permanently in the profile.
new-domain
Instructs the client to replace only the hostname of the subscription URL, preserving the path and query string.
| Property | Value |
|---|---|
| Type | string (bare host, no scheme, no path) |
| Example value | new.example.com or new.example.com:8443 |
Example:
new-domain: cdn.example.comIf the current subscription URL is https://old.example.com/sub/abc, this produces https://cdn.example.com/sub/abc.
fallback-url
An alternative full URL to try if the primary subscription URL fails (non-2xx or connection error).
| Property | Value |
|---|---|
| Type | string (full URL) |
| Persisted | Yes — saved to the profile for future fetches |
Example:
fallback-url: https://backup.example.com/subscription/abc123Prizrak-Box tries the primary URL first. If it fails, it falls back to fallback-url. The fallback value is updated (or cleared) on every successful fetch.
fallback-domain
An alternative domain to substitute into the primary URL if it fails.
| Property | Value |
|---|---|
| Type | string (bare host) |
| Persisted | Yes — saved to the profile |
Example:
fallback-domain: backup.example.comIf the primary URL is https://main.example.com/sub, this fallback tries https://backup.example.com/sub.
Android UI Controls Android only
Section titled “Android UI Controls ”The following headers are supported exclusively by the Android version of Prizrak-Box. They allow subscription providers to control certain UI elements and behaviour of the Android client.
All values are applied once on subscription fetch and persist in the profile until the next update.
pxa-latency-dots
Controls how proxy latency is displayed in the proxy list.
| Property | Value |
|---|---|
| Type | integer |
| Values | 0 = latency numbers, 1 = latency dots |
Example:
pxa-latency-dots: 1pxa-simple-mode
Activates a simplified interface mode — shows only the first select proxy group of your Mihomo configuration on the app’s main screen.
| Property | Value |
|---|---|
| Type | integer |
| Values | 1 to enable |
Example:
pxa-simple-mode: 1pxa-global-mode-mp
Shows the Global Mode menu item in the bottom-left corner of the current profile card when a VPN connection is active.
When not set (or 0), the item may be hidden.
| Property | Value |
|---|---|
| Type | integer |
| Values | 1 to show |
Example:
pxa-global-mode-mp: 1pxa-conns-view-mp
Shows the Connections view menu item in the bottom-left corner of the current profile card when a VPN connection is active.
| Property | Value |
|---|---|
| Type | integer |
| Values | 1 to show |
Example:
pxa-conns-view-mp: 1pxa-rp-mp
Shows the Rules Provider (RP) menu item in the bottom-left corner of the current profile card when a VPN connection is active.
| Property | Value |
|---|---|
| Type | integer |
| Values | 1 to show |
Example:
pxa-rp-mp: 1HWID Authentication
Section titled “HWID Authentication”Prizrak-Box supports the RemnaWave HWID Device Limit header format. When a subscription uses hardware-based device authentication, two groups of headers are involved: headers sent by the client with every request, and headers returned by the server in the response.
Headers Sent by Prizrak-Box (Request Headers)
Section titled “Headers Sent by Prizrak-Box (Request Headers)”When a profile has HWID active, Prizrak-Box automatically attaches the following headers to every subscription fetch:
| Header | Description |
|---|---|
X-Hwid | Hardware fingerprint — the unique identifier for this device |
X-Device-OS | Operating system name (e.g. Windows, Android, macOS) |
X-Ver-OS | OS version string (e.g. 14, 11, 14.5) |
X-Device-Model | Device model name (e.g. Pixel 8, iPhone 14 Pro Max) |
Headers Returned by Server (Response Headers)
Section titled “Headers Returned by Server (Response Headers)”The server returns the following headers to communicate HWID status. Prizrak-Box reads and acts on each of them.
X-Hwid-Active 
Always true when the HWID Device Limit is enabled on the server side. Prizrak-Box uses this to mark the profile as HWID-protected in the UI.
| Property | Value |
|---|---|
| Type | string (boolean) |
| Values | true |
X-Hwid-Active: trueX-Hwid-Not-Supported 
true if HWID Device Limit is enabled on the server, but the client did not send an X-Hwid header.
This signals to the app that the device was not identified and the subscription may be restricted.
| Property | Value |
|---|---|
| Type | string (boolean) |
| Values | true |
X-Hwid-Not-Supported: trueX-Hwid-Max-Devices-Reached 
true if HWID Device Limit is enabled and the user has reached their maximum number of allowed devices.
The app can display a warning to the user that no new devices can be added.
| Property | Value |
|---|---|
| Type | string (boolean) |
| Values | true |
X-Hwid-Max-Devices-Reached: true