At a Glance

Know the difference between a subscription URL and a node share link before choosing an import method. This guide is for users who already have a subscription URL and want to add it on desktop or Android. Follow the steps to create a group, update it, and troubleshoot failures at the URL, network request, or content parsing stage. A successful import only means the configuration appears in the list; test the connection separately.

Subscription URLs vs. Share Links

A subscription URL is an endpoint the client requests periodically, usually starting with https://. The client fetches a set of node configurations from the URL and adds them to a subscription group. A single share link describes one node and commonly starts with vmess://, vless://, or trojan://. They may both look like long strings, but they require different import methods.

Not every HTTPS URL is a subscription URL. An account homepage, purchase page, or dashboard that requires a web login may return a webpage instead of a node list. Copy the client subscription URL specifically provided by your service, and make sure its output format works with v2rayN or v2rayNG.

Subscription URL

Common prefix
https://
What it contains
A set of node configurations returned by the server
Where to add it
The URL field in subscription group settings
How to update
Request the URL again to refresh the group

After saving the URL, you still need to update the subscription. Saving it alone does not download any nodes.

Node share link

Common prefix
vmess://、vless://
What it contains
Connection details for a single node
Where to add it
Import configuration from clipboard
How to update
Fetch and import new share link content

You can copy multiple share links at once, but that does not give them subscription update capabilities.

v2rayN: Add a Subscription Group, Then Update It

On desktop, create a group before updating it. The steps below use common labels from the Chinese v2rayN interface. Button placement may differ between the cross-platform desktop UI and the WPF interface; some versions label the add button “Add” or show “+”. Use the note and URL fields in the Subscription Group Settings window. Don't open the editor for an individual server.

  1. Open Group Settings

    From the main window, select “Subscription Groups” → “Subscription Group Settings” to open group management. If a group already exists, check its name first to avoid replacing its subscription.

  2. Add the Subscription URL

    Select “Add” or “+”, enter a recognizable name in the remarks field, and paste the full subscription URL into the address or URL field. Don't include explanatory text, quotation marks, or line breaks.

  3. Save and Select the Group

    Save, return to the main window, and select the subscription group you just created. If your version has an enable option, make sure the group is enabled.

  4. Update the Current Subscription

    Select “Subscription Groups” → “Update Current Subscription (Without Proxy)”. Use this option when your current network can access the subscription URL directly. After the update, check the status message or log at the bottom to confirm that nodes were fetched and imported.

  5. Check the Node List

    Clear any search filters and check whether nodes appear in the current group. If you already have a working proxy and the subscription URL requires one, try “Update Current Subscription (Through Proxy)”. Don't keep switching between these options when you don't yet have a working connection.

“Update All Subscriptions” requests every group, making first-time import issues harder to isolate. Get one group updating successfully before updating them all. To update through a proxy, you need an existing working proxy. If a broken node is your only way to reach the subscription, restore a working connection or use a subscription URL you can access directly first.

v2rayNG: Use Subscription Settings and Clipboard Import Separately

On Android, save the subscription before updating it. v2rayNG uses the Xray core for connections, but the client handles subscription downloads and list parsing. If the list is empty, check the update result before changing transport settings or repeatedly granting VPN permission.

  1. Open Subscription Settings

    Tap the menu in the upper-left corner of the main screen, then open “Subscription Group Settings”. Some older versions call this “Subscription Settings”; both options manage subscription names and URLs.

  2. Add and Save

    Tap “+”, enter a note and URL, and check that the pasted text has no spaces, missing characters, or extra punctuation. Tap the checkmark to save. Don't enter a node share link from a QR code as a subscription URL.

  3. Update the Subscription

    Return to the main screen, open the menu in the upper-right corner, and select “Update Subscription”. If your version offers separate options for the current group and all groups, update the group you just created first, then check the status message.

  4. Select a Node and Connect

    When nodes appear, select one and tap the connect button. Grant the VPN connection request if prompted. This permission lets the app handle device traffic; it does not verify that the subscription content works.

If you only have a share link such as vless://, copy the entire link and use “+” → “Import from Clipboard” on the main screen. You don't need to create a subscription group first. A QR code is just a way to carry information: whether it contains a share link or a subscription URL determines which import method to use.

Manage the Same Subscription Separately on Each Device

Desktop: v2rayN
  • Save the URL in Subscription Group Settings.
  • Update the current subscription first; choose whether to use a proxy as needed.
  • After importing nodes, check the system proxy or Tun mode.
Android: v2rayNG
  • Save the URL in Subscription Group Settings.
  • Return to the main screen and update the subscription.
  • Select a node, connect, then test network access in the target app.

Both clients can use the same URL, but each updates independently. Update times, format compatibility, and filters can differ, so the lists may not match exactly.

Base64 Subscriptions, Share URIs, and Configuration Files

A common legacy subscription contains a newline-separated list of share links encoded as a single Base64 string. The client decodes the outer text, then identifies nodes line by line. Some services return a plain-text list of share links instead. Import compatibility depends on the formats supported by the client and the parameters in each link, not on how long the string looks.

Also distinguish outer subscription encoding from encoding inside an individual protocol link. For example, a common VMess share link carries Base64-encoded JSON after vmess://; VLESS share links usually represent the configuration through a URI's user info, host, port, and query parameters. Don't treat decoded text as a link for a different protocol.

Content receivedWhat it meansWhat to do
HTTPS subscription URLAn endpoint for fetching remote configuration, not the configuration itselfAdd it to a subscription group, then update
Base64-encoded textOften an outer encoding of a list of share linksHave the client download and parse it from the subscription URL
Multiple lines of share URIsUsually one node per lineBulk import from the clipboard if the client supports it
Complete JSON configurationMay include structures such as inbounds, outbounds, and routingUse the appropriate custom configuration option; don't treat it as a standard subscription URL
Webpage or another configuration syntaxCould be a login page, error page, or unsupported output formatGet subscription output formatted for your client

Subscription Update Returns No Nodes: Troubleshoot in Three Stages

Note the update message before changing settings. A timeout, HTTP error, and successful response that parses to zero nodes point to different stages of the process. The numbers below explain HTTP status codes; they are not connection speed results. Use them to diagnose an issue only when the log or server response actually includes a status code.

200
Request succeeded; check the content
401
Usually requires valid credentials
403
Access denied; check permissions

Stage 1: Is the URL Complete?

Stage 2: Did the Request Complete?

Stage 3: Can the Response Be Parsed?

HTTP 200 only means the request was processed successfully; it doesn't guarantee that the response contains nodes. A login page, access verification page, or text describing an error may also return this status. Opening the URL in a browser doesn't prove the client received a compatible subscription response: the browser may have a login cookie that the client doesn't.

  1. Start with the client's update log to distinguish a failed download, decoding error, unsupported protocol, or successful import of zero nodes.
  2. Choose an output format for v2rayN or v2rayNG from the options provided by your service. Don't judge compatibility by the file extension alone.
  3. If only some nodes are missing, check whether the client supports their protocols and parameters, and update the client through its official download page. Don't remove TLS, REALITY, or transport parameters just to make parsing succeed.
  4. Clear search filters and switch to the correct group. If the log says nodes were imported but the page is still empty, check the selected group and display filters first.

Test and Maintain Your Connection After Import

Seeing nodes in the list is only the first step. Select a node, connect, then run a real connection test and check access in the target app. TCPing can help check whether a target TCP port is reachable, but it can't by itself confirm authentication, TLS, the transport handshake, or end-to-end network access. A real connection test reflects only the result for that test's target; it doesn't mean every website will be accessible.

Will a subscription update automatically switch to the fastest node?

No. Updating a subscription fetches configuration, a speed test checks connection performance, and the selected node determines which configuration is used. An update won't switch nodes unless you have explicitly configured an automatic selection feature. Check the selected node after an update, especially if it was removed from the subscription.

The same URL imports on desktop but returns no nodes on Android. What should I do?

Compare the update logs and network paths on both devices, then check which formats each client supports. The server may return different content based on request characteristics, and the clients may support different parameters. Don't start by editing the node password. First confirm that Android received a node list rather than an error page, then check protocol compatibility.