# Application Management

### Transmission methods

All parameters can be transmitted in two ways:

**1. HTTP header:**

```
HTTP/2 200
profile-title: My VPN
support-url: https://t.me/support
```

**2. Line in the subscription body (comment with `#`):**

```
#profile-title: My VPN
#support-url: https://t.me/support
#profile-update-interval: 6
#announce: Announcement text
vless://...
```

> **Priority:** HTTP headers have priority. Lines in the subscription body are used as a fallback when the corresponding header is missing. This is especially useful when distributing subscriptions via static files (nginx), where there is no way to set custom HTTP headers.

***

### Standard parameters

#### Subscription name

The name of the subscription profile. Maximum 25 characters. Can be sent as text or base64 (UTF-8).

**Header:**

```
profile-title: My VPN
```

**In the subscription body:**

```
#profile-title: My VPN
```

**Base64 with description** (first line is the name, the rest are the description):

```
profile-title: base64:0JzQvtC5IFZQTgrQlNC+0LHRgNC+INC/0L7QttCw0LvQvtCy0LDRgtGM
```

**Alternative headers** (fallback if `profile-title` is missing):

* `subscription-name` — alternative subscription name
* `content-disposition` — filename from the header (extensions `.txt`, `.yaml`, `.yml` are removed automatically)

#### Subscription description

A separate header for the description, if it is not included in `profile-title`:

```
profile-description: Fast servers in Europe
```

Supports base64: `profile-description: base64:...`

#### Subscription update interval

The interval for automatic subscription updates in hours. The value must be divisible by one hour.

**Header:**

```
profile-update-interval: 6
```

**In the subscription body:**

```
#profile-update-interval: 6
```

#### Subscription status

Information about balance, used traffic volume, and subscription expiration date. Fields are separated by semicolons.

```
subscription-userinfo: upload=0;download=1073741824;total=10737418240;expire=1700000000
```

| Field      | Description                               |
| ---------- | ----------------------------------------- |
| `upload`   | Outgoing traffic (bytes)                  |
| `download` | Incoming traffic (bytes)                  |
| `total`    | Traffic limit (bytes)                     |
| `expire`   | Expiration date (Unix timestamp, seconds) |

> If `expire` > 32,000,000,000 — the value is interpreted as milliseconds and converted to seconds.

#### Support link

A button linking to the support page. If the link leads to Telegram, the Telegram icon is shown.

**Header:**

```
support-url: https://t.me/your_support_bot
```

**In the subscription body:**

```
#support-url: https://t.me/your_support_bot
```

#### Website link

A button linking to the subscription website.

**Header:**

```
profile-web-page-url: https://your-site.com
```

**In the subscription body:**

```
#profile-web-page-url: https://your-site.com
```

Alternative header: `homepage`

#### Announcement

Text announcement (up to 200 characters). Can be sent as text or base64.

**Header:**

```
announce: Scheduled maintenance on March 15 from 03:00 to 05:00 MSK
```

**Base64:**

```
announce: base64:0J/Qu9Cw0L3QvtCy0L7QtSDQvtCx0YHQu9GD0LbQuNCy0LDQvdC40LU=
```

**Announcement URL** (link, not text):

```
announce-url: https://example.com/news
```

**In the subscription body:**

```
#announce: Scheduled maintenance on March 15
#announce-url: https://example.com/news
vless://uuid@server:443#Server
```

***

### Summary table of parameters

| Header                              | Alternatives                               | Format                     | Body (`#`) | Description                                          |
| ----------------------------------- | ------------------------------------------ | -------------------------- | ---------- | ---------------------------------------------------- |
| `profile-title`                     | `subscription-name`, `content-disposition` | text / `base64:...`        | ✅          | Subscription name                                    |
| `profile-description`               | —                                          | text / `base64:...`        | —          | Subscription description                             |
| `profile-update-interval`           | —                                          | number (hours)             | ✅          | Update interval                                      |
| `subscription-userinfo`             | —                                          | `key=value;...`            | —          | Traffic statistics                                   |
| `support-url`                       | —                                          | URL                        | ✅          | Support link                                         |
| `profile-web-page-url`              | `homepage`                                 | URL                        | ✅          | Website link                                         |
| `announce`                          | —                                          | text / `base64:...`        | ✅          | Announcement text                                    |
| `announce-url`                      | —                                          | URL                        | ✅          | Announcement link                                    |
| `autorouting`                       | —                                          | URL                        | ✅          | Auto-updating routing profile                        |
| `routing`                           | —                                          | base64 / link              | ✅          | Static routing profile                               |
| `premium-url`                       | —                                          | URL                        | —          | “Premium” link (in the subscription card, see below) |
| `per-app-proxy-enable`              | —                                          | `1` / `0`                  | —          | Enable per-app mode (Android only)                   |
| `per-app-proxy-mode`                | —                                          | `bypass` / `proxy`         | —          | Per-app mode                                         |
| `per-app-proxy-list`                | —                                          | CSV / URL                  | —          | List of package names                                |
| `fragmentation-enable`              | —                                          | `1` / `0`                  | —          | TCP fragmentation                                    |
| `fragmentation-length`              | —                                          | `min-max`                  | —          | Fragment length range                                |
| `fragmentation-interval`            | —                                          | `min-max`                  | —          | Delay range between fragments                        |
| `fragmentation-packets`             | —                                          | `tlshello` / `1-3` / `all` | —          | Which packets to apply to                            |
| `noises-enable`                     | —                                          | `1` / `0`                  | —          | Sending noise packets before handshake               |
| `noises-type`                       | —                                          | `rand` / `str` / `hex`     | —          | Noise content type                                   |
| `noises-packet`                     | —                                          | string                     | —          | Noise payload (format depends on `type`)             |
| `noises-delay`                      | —                                          | `min-max` ms               | —          | Delay range between noises                           |
| `server-address-resolve-enable`     | —                                          | `1` / `0`                  | —          | Pre-DNS resolve of the server address via DoH        |
| `server-address-resolve-dns-domain` | —                                          | URL                        | —          | DoH server URL                                       |
| `server-address-resolve-dns-ip`     | —                                          | IP                         | —          | DoH server IP (bootstrap)                            |

> All headers are case-insensitive (`profile-title` = `Profile-Title`).
>
> Parameters from the subscription body (body) are used as a fallback — HTTP headers always have priority.
>
> All headers with values support the prefix `base64:` for transmitting UTF-8 data without issues with Latin-1 / non-ASCII (applies to `announce`, `profile-title`, `profile-description`, `per-app-proxy-list`).

***

### Routing

#### Routing profile

Static profile in base64. More details — routing.md.

```
routing: ://routing/onadd/ewog...base64...
```

#### Auto-updating routing profile

URL source of the routing profile with periodic updates. More details — autorouting.md.

```
autorouting: https://raw.githubusercontent.com/user/repo/main/profile.json
```

#### Priority of routing sources

If the routing profile is specified in multiple places, the **first found** is used by priority:

| Priority    | Source                                                                          |
| ----------- | ------------------------------------------------------------------------------- |
| 1 (highest) | Header `autorouting`                                                            |
| 2           | Body — line with URL (`://autorouting/onadd/`, `://autorouting/add/`)           |
| 3           | Header `routing`                                                                |
| 4 (lowest)  | Body — line with base64 (`://routing/onadd/`, `://routing/add/`, `://routing/`) |

> **Important:** only `://autorouting/` sets `sourceURL` and enables auto-update. Lines `://routing/onadd/{url}` in the subscription body import the profile once, without binding it to the source.

***

### Server description

An additional label displayed under the server name (maximum 30 characters). Added after `title` using the separator `?`:

```
vless://uuid@server:443#Server1?serverDescription=base64-text
```

***

### Per-app proxy (Android only)

Android VpnService allows routing through the VPN only **selected apps** or, conversely, **exclude** them from the tunnel. The provider can force this mode through three headers:

```
per-app-proxy-enable: 1
per-app-proxy-mode: bypass
per-app-proxy-list: com.android.chrome,org.telegram.messenger
```

#### Parameters

| Header                 | Value               | Description                                                                                  |
| ---------------------- | ------------------- | -------------------------------------------------------------------------------------------- |
| `per-app-proxy-enable` | `1` / `0`           | Enable per-app mode                                                                          |
| `per-app-proxy-mode`   | `bypass` \| `proxy` | `bypass` — the specified apps **bypass** the VPN. `proxy` — **only** they go through the VPN |
| `per-app-proxy-list`   | CSV or URL          | List of package names separated by commas, newlines, or a URL to a text file                 |

#### List format

**Inline (CSV or line-based):**

```
per-app-proxy-list: com.android.chrome,org.telegram.messenger,com.google.android.youtube
```

**Base64 (for long lists):**

```
per-app-proxy-list: base64:Y29tLmFuZHJvaWQuY2hyb21lCm9yZy50ZWxlZ3JhbS5tZXNzZW5nZXI=
```

**Remote URL:**

```
per-app-proxy-list: https://example.com/myapps.txt
```

The file at the URL is plain text with package names, one per line or separated by commas. The client downloads it when applying the subscription and on every update.

#### Behavior

* If none of the three fields is specified — the user settings in the app **are not overridden**.
* If `per-app-proxy-enable` is set in `0` — per-app mode is disabled, even if the user enabled it locally.
* Platforms other than Android **ignore** these headers.

***

### TCP fragmentation

Overrides the user's global fragmentation settings for this subscription.

```
fragmentation-enable: 1
fragmentation-packets: tlshello
fragmentation-length: 10-30
fragmentation-interval: 10-30
```

| Header                   | Value                               | Description                                 |
| ------------------------ | ----------------------------------- | ------------------------------------------- |
| `fragmentation-enable`   | `1` / `0`                           | Enable fragmentation                        |
| `fragmentation-packets`  | `tlshello` \| `1-3` \| `1` \| `all` | Which TCP packets to apply fragmentation to |
| `fragmentation-length`   | `min-max`                           | Fragment length range in bytes              |
| `fragmentation-interval` | `min-max`                           | Delay range between fragments in ms         |

The same parameters are available via the Premium API as `fragmentEnabled / fragmentPackets / fragmentLength / fragmentInterval` — with a Premium subscription, HTTP headers are ignored in favor of API values.

***

### Noise packets (noises)

Sending random UDP packets before the VPN handshake for obfuscation. Relevant primarily for WireGuard and Hysteria2 in networks with deep packet inspection.

```
noises-enable: 1
noises-type: rand
noises-packet: 10-20
noises-delay: 10-50
```

| Header          | Value                    | Description                                                      |
| --------------- | ------------------------ | ---------------------------------------------------------------- |
| `noises-enable` | `1` / `0`                | Enable noises                                                    |
| `noises-type`   | `rand` \| `str` \| `hex` | Payload format                                                   |
| `noises-packet` | string                   | Content of the noise packet; for `rand` — length range `min-max` |
| `noises-delay`  | `min-max` ms             | Delay range between noise packets                                |

***

### Resolving the server address via DoH

Bootstrap resolve of the server domain via DNS-over-HTTPS before the tunnel is established. Useful when the provider's DNS replaces the VPN server address.

```
server-address-resolve-enable: 1
server-address-resolve-dns-domain: https://common.dot.dns.yandex.net/dns-query
server-address-resolve-dns-ip: 77.88.8.8
```

| Header                              | Value     | Description                                                    |
| ----------------------------------- | --------- | -------------------------------------------------------------- |
| `server-address-resolve-enable`     | `1` / `0` | Enable DoH resolve                                             |
| `server-address-resolve-dns-domain` | URL       | DoH endpoint (usually `/dns-query`)                            |
| `server-address-resolve-dns-ip`     | IP        | DoH server IP for bootstrap — used before resolving its domain |

The same fields are passed via the Premium API as `serverAddressResolveEnable` / `serverAddressResolveDnsDomain` / `serverAddressResolveDnsIp`.

***

### “Premium” link

An additional button in the subscription card — leads to the purchase page or the provider's personal account.

```
premium-url: https://example.com/pricing
```

| Header        | Value | Description                                   |
| ------------- | ----- | --------------------------------------------- |
| `premium-url` | URL   | “Premium” button URL in the subscription card |

If not set — the button is hidden.

***

### Settings that the subscription **cannot** set via HTTP headers

These parameters are stored in the provider's Premium API configuration and are applied by the client only if the subscription domain belongs to a Premium provider. It is not possible to enable them “through a subscription without an account in the panel” — this is by design.

| Group                | What is configured                                                   | Reference                                          |
| -------------------- | -------------------------------------------------------------------- | -------------------------------------------------- |
| Lite Mode            | Simplified interface, links to bot/channel/support + preset icons    | premium-api.md § Lite Mode                         |
| Subscription banner  | Text + colors + button in the subscription card                      | premium-api.md § Subscription banner               |
| Custom theme         | Solid colors and gradients for the account / background              | premium-api.md § Custom theme                      |
| Force settings       | `forceConnectionStyle`: classic round button vs compact-toggle       | premium-api.md § Forced settings                   |
| Ping and sorting     | `defaultPingProtocol`, `defaultSortOrder`, `pingOnUpdate`            | premium-api.md § Ping and sorting                  |
| Domain fronting      | `resolveAddress` / `hostHeader` (SNI ↔ Host pairing for obfuscation) | premium-api.md § Domain fronting and fragmentation |
| Admin access by HWID | `adminHwids` + auto-approve pushes                                   | admin-hwids.md                                     |
| Push notifications   | Moderation, targeting, cancellation                                  | provider-notifications.md                          |

> **Fragmentation, noises, and DoH resolve** are available through **both** channels: subscription HTTP headers (see above) or via the Premium API. With a Premium subscription, API values take priority over headers.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://incy.gitbook.io/docs/docs-en/developer-documentation/application-management.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
