A link starting with vmess:// or vless:// is usually a configuration for one server. A subscription URL, by contrast, is an endpoint for retrieving a list of configurations. Use share links for quick tests; for ongoing use, prefer subscriptions from a source you trust. This guide covers how to identify each type, import it on desktop and Android, update subscriptions, and troubleshoot issues—with a clear distinction between adding a configuration and connecting successfully.
Share Links vs. Subscription URLs: A Configuration Snapshot or an Update Source
An individual share link stores the connection settings for one server, typically including its address, port, user ID, and transport settings. After import, the client converts it into a local configuration. If the provider later changes the server port, the imported configuration will not update automatically; you’ll need to import it again or edit it manually.
A subscription URL usually starts with https://. The client requests the URL, retrieves a set of configurations, and adds them to a designated group. It may return one configuration or many; what makes it a subscription is its purpose and response, not the number of servers. A regular webpage URL is not necessarily a valid subscription, even if it opens in a browser.
Subscription URL from a trusted source
RecommendedA saved endpoint for retrieving a list of configurations again later. Useful when a provider may change server addresses, ports, or the available server list. Before updating, make sure the source is trustworthy and the format is supported by your client.
Best for: ongoing use, multiple servers, and regularly syncing settings
Single vmess:// or vless:// share link
Stores a snapshot of one specific configuration, making its settings easy to inspect individually. It does not sync continuously; exporting a single link from a subscription does not preserve the subscription’s update relationship.
Best for: quick tests, manual management, and sharing self-hosted server settings
In short: identify the URL type, then choose the right import option
For vmess:// or vless:// content, use the import-from-clipboard option. For a subscription URL explicitly provided as such, save it in subscription settings first, then run an update. Don’t keep pasting the same subscription URL as if it were an individual server link.
Link Structure: Check the Protocol, Transport, and TLS Separately
A common VMess share link has a Base64-encoded JSON payload after vmess://. Decoding it often reveals fields such as add, port, id, net, host, path, and tls. Field conventions can vary between generators, so rely on what the client parses and how the server is configured.
VLESS share links usually use a URI format: the user ID appears before the address, the port follows the host, and query parameters specify transport and security settings. The text after # is the display name. Common parameters include type, security, sni, and flow; REALITY links may also include pbk, sid, and fp. Don’t swap parameters just because their names look similar.
| Field | What to check | Common misconception |
|---|---|---|
| Address and port | Server domain or IP address and the port it actually listens on | Port 443 does not necessarily mean TLS is enabled |
| Credentials | VMess or VLESS user ID | The same display name does not mean the credentials are the same |
| Transport | Transport type, such as TCP or WebSocket, and its associated settings | A WebSocket path is not the path in a subscription URL |
| Security settings | TLS or REALITY, server name, and any required fields | VLESS does not encrypt traffic on its own; check the security layer settings |
| Display name | The name used to identify the entry in the list | Changing the display name does not change the server location or route |
Base64 is an encoding, not a security measure. A QR code is simply another way to represent the link. Don’t submit a complete link to an unfamiliar online decoder. You can check the fields in the client’s editor, but don’t change the user ID, path, or server name without information from the server side.
Importing into v2rayN: Clipboard and Subscription Groups Are Separate
These steps use the menu labels found in common Chinese-language versions of v2rayN; wording and locations may vary by version. Copy the complete link, removing any quotes, explanatory text, or line breaks added by a messaging app. Preserve query parameters and percent-encoding exactly as they appear in the link. Don’t delete characters from the entire link just because the display name contains spaces.
- Import a single share link: Copy the complete vmess:// or vless:// link, then in the main window choose “Servers” → “Import bulk URLs from clipboard.” Many desktop versions also support
Ctrl+V; if the shortcut doesn’t work, use the menu. - Check the parsed configuration: Open the newly imported entry in the server list and check the protocol, address, port, transport, and security settings. Seeing an entry means the link was parsed; it does not mean the settings have been verified by a successful connection.
- Save the subscription URL: Go to “Subscription groups” → “Subscription group settings,” add a group, enter a recognizable name and the complete subscription URL, then save. A name like “Daily subscription” is fine; don’t put an access token in the name.
- Retrieve the server list: From the “Subscription groups” menu, choose “Update current subscription (without proxy)” or “Update all subscriptions (without proxy).” If your current network cannot reach the subscription site but you already have a working proxy, try the corresponding update option that uses a proxy.
- Select a configuration and verify it: After the update, select a server and set it as active, then check the system proxy status in the main window. Apps that need the system proxy may require an option such as “Automatically configure system proxy.” Selecting a server alone does not mean all app traffic is going through the core.
Importing into v2rayNG: Save the Subscription, Then Update It
v2rayNG is an Android client that uses the Xray core. Parsing a share link, updating a subscription list, and routing Android traffic through the VPN are three separate steps. The first two provide configurations; connecting is when the app requests or uses VpnService authorization. A successful subscription update does not prove that the VPN is running or that traffic from every app is routed through it.
- Single link: Copy the link, open v2rayNG, tap “+” in the top-right corner, then choose “Import from clipboard.” If you have a QR code, use “Scan QR code” in the same add menu and make sure it comes from a trusted source.
- Subscription URL: Open “Subscription settings” in the side menu, tap “+,” enter a name and URL, then save. Don’t enter a single vmess:// share link where a subscription URL is required.
- Get the server list: Return to the configuration list, open the top-right overflow menu, and select “Update subscription.” Some versions let you update a specific group; after the update, check the intended group rather than relying on the currently selected filter.
- Connect and authorize: Select a configuration and tap the connect button. The first time you connect, allow the VPN connection when prompted by Android. If another connection is already using the system VPN, resolve the conflict first, then check the connection status and logs.
- Check per-app settings: If only some apps bypass the proxy, check “Per-app proxy” under “Settings.” Confirm whether the current mode proxies only selected apps or bypasses selected apps; don’t infer its behavior from the checkmarks alone.
Use the Same Subscription on Both Clients
Desktop: v2rayN
- Save the URL in subscription group settings.
- Run an update manually and confirm the intended group has configurations.
- Configure the system proxy and routing rules separately.
Android: v2rayNG
- Save the same URL in subscription settings.
- Update the subscription, then select an active configuration.
- Handle VPN authorization and per-app proxy settings separately.
Run updates on each client separately. Both can use the same source for their server lists, but routing, DNS, and app traffic settings usually aren’t synced through a standard node subscription. Before using both clients at once, check whether the provider limits the number of devices.
How Subscription Updates Work: Refreshing the List Does Not Sync Every Setting
A typical server subscription returns a set of share links, sometimes Base64-encoded as a whole or in another format supported by the client. A successful HTTP request only means the server returned something. If the response is a login page, an error message, or an unsupported format, the client may still report that there are no valid configurations.
When you update, the client usually rebuilds or replaces the server entries in the corresponding subscription group. Manually edited names, addresses, or transport settings may be overwritten, and the order of entries may change. Don’t treat an entry in a subscription group as a permanent manual copy. If you need to keep your changes, save a separate copy in a manual group and remember that it will no longer follow the source subscription automatically.
- Expired URL: If the subscription URL expires or its access token is reset, existing configurations may still work for a while, but you won’t be able to retrieve an updated list. Get a new URL from the original provider.
- Servers removed: Fewer entries after an update doesn’t necessarily mean the client lost configurations; the provider may have removed servers. Check the update log and group filters first.
- Local settings: Standard node subscriptions generally don’t change the system proxy, per-app list, DNS policy, or local listening port. Updating nodes does not restore a settings backup.
- Scheduled updates: Automatic retrieval is possible only if the client has the relevant task enabled and the environment allows it to run. Using the same URL in both clients does not keep their lists in sync in real time.
Import and Update Troubleshooting: Identify Where It Fails
First distinguish between “can’t parse,” “can’t retrieve the subscription,” and “configuration added but won’t connect.” These failures happen at different stages and require different troubleshooting. For a subscription timeout, check the retrieval path; if a server won’t connect, check its settings and core logs. You usually don’t need to delete and re-import the entire subscription group.
Why does the client say there are no valid configurations after I copy a link?
Check that the link starts with a complete vmess:// or vless:// prefix. Make sure you didn’t copy only the display name, miss the end of the link, or get a truncated link from a messaging app. If you copied an HTTPS subscription URL, save it in subscription settings and run an update instead. Don’t change its protocol prefix yourself.
The subscription opens in a browser, but the client can’t update it. Why?
The browser may be showing a login page rather than the subscription data, and it may use a different proxy route from the client. Check that the URL is complete, then look in the update log for a timeout, HTTP status, or parsing error. Try updating through a proxy only if you already have a working one; otherwise, you could depend on a server you haven’t retrieved yet.
Why does the connection time out even though the server imported successfully?
Open the configuration and check the server address, remote port, transport type, TLS server name, and any required REALITY parameters. Then check the system clock, network, and logs. Port 443 only tells you which port is in use; it does not confirm that TLS is configured correctly. Don’t use disabling certificate verification as a substitute for troubleshooting.
Why did my manual changes revert after updating the subscription?
The subscription group is rebuilt from the remote list, so local changes may be replaced at the next update. Copy configurations you need to manage separately into a manual group, give them a descriptive name, and after updating check that the active server is still the one you intended.
Why are some apps still connecting directly after a successful subscription update?
A subscription only provides configurations. On desktop, check the system proxy and each app’s own proxy settings. On Android, check that the VPN is running, along with per-app selections and routing rules. Even if traffic reaches the core, a direct-routing rule may send it outside the proxy; check the logs to find out.
After importing, check three things: the configuration is in the right group, the intended server is active, and the target app is using the expected outbound route. To learn more about user IDs, transport layers, and routing fields, see the Glossary and Protocol Reference. Don’t infer protocol capabilities from a server’s display name alone.