Skip to content

Request headers

This is what your panel receives when mins fetches a subscription URL. Use it to tell clients apart, to enforce device limits and to choose a response per platform.

GET /sub/abc123 HTTP/1.1
Host: sub.example.com
User-Agent: mins/1.1.0 (android)
Accept-Language: en
x-hwid: 3f9a1c07b2d44e5e8a61c0d2f7b9e413
x-device-os: android
x-ver-os: Linux 6.1.99-android14-11 #1 SMP PREEMPT
x-device-model: localhost
Header Value Notes
User-Agent Depends on the subscription’s preset, see below Providers can force a value with change-user-agent.
Accept-Language en or ru The language set in Settings → Appearance → Language.
x-hwid 32 lowercase hex characters Random identifier, generated once per installation and the same for all subscriptions on that installation. It is not derived from hardware.
x-device-os android, ios, macos, windows or linux Operating system of the device.
x-ver-os Free text The operating system version string as the platform reports it. The format differs between systems.
x-device-model Free text The device’s host name as the OS reports it. It is not a marketing model name and can be a generic value such as localhost.

The four x- headers are sent together or not at all. There are no cookies and no authentication headers: the credentials are the subscription URL itself.

The user picks a preset per subscription on the subscription screen (User-Agent). The default is mins.

Preset User-Agent sent
mins (default) mins/<app version> (<os>), for example mins/1.1.0 (android)
Happ Happ/1.63.1
INCY INCY/<app version>/<os>, for example INCY/1.1.0/android
Xray Xray-core/26.10.31
custom Any text the user typed

<os> is the same value as in x-device-os.

Why this matters to a panel: many panels choose the response format from the User-Agent (for example JSON for Happ-like clients and a link list for others). Users who need a particular format can switch the preset. mins accepts a link list, base64, and Xray JSON, so the default mins User-Agent works with any of them; see Subscription format.

Providers can take over the choice:

Header in your response Effect
change-user-agent: <string> From the next fetch on, this exact string is sent as User-Agent, and the subscription shows it as the Custom User-Agent.
manual-block-user-agent: true The user cannot change the preset or the custom value of this subscription.

x-hwid exists so that panels can count devices and enforce device limits (for example Remnawave). It is on by default.

  • The user can turn it off per subscription with Send device identifier (HWID). With it off, none of the four x- headers is sent.
  • If your service requires the identifier, send subscription-always-hwid-enable: true. mins then tells the user that “Provider requires HWID. Turning it off may stop subscription updates; the choice remains yours.” It does not force the setting: privacy stays with the user.
  • The identifier lives in the app’s data. After a reinstall without restoring a backup, a new identifier is generated.
  • If the client cannot read its stored identifier, it refuses to update subscriptions with “Device identity unavailable; restore a backup before updating subscriptions” and does not send a new one.
Request Sent to Notes
Routing profile by URL The https:// URL from a routing link or the routing key No redirects are followed; 9 s to connect and 20 s to receive. The x- headers are not sent.
Geo files The Geoipurl and Geositeurl of a routing profile User-Agent is the browser string the user chose in Settings → Subscriptions → Geo files User-Agent (default: the same string as the mins preset above), or the provider’s user-agent-geo-files.
Ping probes The probe URL (check-url-via-proxy, default https://www.gstatic.com/generate_204) Through the server being measured, not to your panel.