First, check whether you have a subscription URL, an individual node link, or a config file. Then open the subscription group settings in your client. Saving a URL creates a group, but you still need to update the subscription to fetch nodes. This guide covers desktop and Android setup, URI and Base64 formats, and common update errors—whether you're importing a subscription for the first time or troubleshooting an empty node list.
First, distinguish subscription URLs, node links, and config files
A subscription URL is usually an HTTPS link that the client uses to fetch a set of node configs and add them to a group. It may contain an access token and query parameters, so copy the full URL from your provider's subscription page. Don't copy your account homepage or remove anything after the question mark.
Text starting with vmess:// or vless:// is usually a share link for a single node. It describes one node; it isn't an HTTPS URL that periodically fetches a node list. Pasting one into a subscription URL field often results in an invalid URL or download error. Use the import-from-clipboard option on the main screen instead.
Subscription URL
RecommendedEnter the URL in the subscription group's URL field, then update the subscription. Nodes and parameter changes can be pulled into the client with later updates.
Best for: Initial setup and maintaining a group of nodes over time.
Single URI link
Use Import from clipboard or scan the node's QR code. This imports the config as it is now and usually doesn't create an ongoing update link to its source.
Best for: Temporary additions and troubleshooting a single node.
Full config file
May include inbound and outbound settings, DNS, and routing. A full config is different from a subscription node list and shouldn't be entered in a subscription URL field.
Best for: Users who understand the config structure and the correct import option.
Add a subscription URL and update it in v2rayN
Open the desktop app and select Subscription Group from the top menu. Button locations may vary slightly between UI frameworks and versions. Use Subscription Group Settings as your reference, and don't confuse Import share links from clipboard with the option for adding a subscription URL.
-
Open group settings
Select Subscription Group → Subscription Group Settings. Check for an existing group from the same source first to avoid duplicate groups with similar nodes.
-
Enter the subscription URL
In the settings window, click Add, enter a recognizable name, and paste the full subscription URL into Optional address (Url) or the corresponding URL field. Name the group as you like, but leave the URL unchanged.
-
Save and select the group
Save your changes, return to the main screen, and select the group you just created. An empty list at this point doesn't mean anything went wrong: saving the group hasn't fetched any nodes yet.
-
Update the subscription
Open the Subscription Group menu and select the update command for your subscription. The menu may offer options to update through or without a proxy. If you don't have a working proxy yet, try updating without one first.
-
Check the import results
Check the status area or logs to confirm the update completed, then review the node names and protocols in the selected group. Choose a node and configure the system proxy or TUN as needed; importing nodes alone doesn't route all your apps through a proxy.
Create a subscription group in v2rayNG
v2rayNG is an Android client powered by the Xray core. Subscription management is in the side menu; the + button in the upper-right corner of the main screen is commonly used to import a share link, scan a QR code, or add a config manually. Both routes can add nodes, but they're managed differently.
-
Open subscription settings
Tap the menu in the upper-left corner of the main screen and open Subscription Group Settings. If your version calls it Subscription Groups, make sure the page has fields for a group name and subscription URL.
-
Add a subscription group
Tap + in the upper-right corner and enter a name and subscription URL. Check the start and end of the URL for spaces, line breaks, or extra text added by a messaging app, then save.
-
Return and update
Go back to the main screen and select Update subscription from the more options menu in the upper-right corner. If you see Update current group subscription, switch to the target group before running it. To update every group, use the corresponding update all command.
-
Select a node and connect
Make sure the node list appears, select the config you want, and tap Connect. The first time you connect, allow the VPN connection when Android prompts you. This permission is requested when traffic is routed, not when you save a subscription.
If nodes import successfully but apps can't connect, treat a successful subscription update and a successful node connection as separate things. The first means the subscription response was parsed; the second also depends on server status, protocol settings, device time, and your local network. Don't repeatedly delete and recreate the subscription to fix connection issues.
Understanding URI and Base64 subscription formats
The subscription URL is the way to fetch content; the subscription format is the content returned. Common formats include plain text with one share URI per line, or a Base64-encoded text string containing a list of URIs. Clients recognize the formats they support, but content displayed in a browser isn't necessarily a valid subscription.
One URI per line
- Outer format
- Plain text across multiple lines
- Common prefixes
vmess://、vless://- Node separation
- Usually separated by line breaks
- What to check
- The protocol and parameters in each link
A VMess share link commonly includes an encoded JSON payload after the protocol prefix. Don't confuse encoding within a link with encoding the entire subscription.
Base64-encoded list
- Outer format
- An encoded text string
- Decoded result
- Usually a list of URIs, one per line
- Common variants
- Standard and URL-safe alphabets
- Privacy
- Reversible encoding, not encryption
Don't Base64-encode the subscription URL to try to fix its format. The client needs the original URL used to fetch the subscription, not a Base64-encoded version of that URL.
These numbers help explain the format and how the request is made; they don't indicate node ports or connection speeds. The HTTPS port used to fetch a subscription can be completely different from the server port used by each imported node. Standard Base64 may end with the = padding character, but its presence or absence alone doesn't tell you whether the content is valid.
Troubleshoot empty lists and update errors by failure stage
Keep any working nodes, then update the target group. If no nodes appear, check the selected group, the request result, and the response format in that order. Don't assume Base64 is the cause or use a subscription converter instead of basic troubleshooting.
| Symptom | Check first | What to do next |
|---|---|---|
| List is empty after saving | Whether you ran an update and selected the right group | Select the target group, update once, and clear any unnecessary search filters. |
| Connection timed out or DNS lookup failed | Whether the subscription domain is reachable, plus your network and update method | Check both a direct connection and an existing proxy route. Don't change node protocol settings first. |
| HTTP 401 or 403 | Whether the token has expired, account permissions, or server-side access restrictions | Check the subscription status with your provider and copy the URL again. A 403 doesn't necessarily mean your account has expired. |
| HTTP 404 | Whether the path was truncated or the URL has changed | Get the full URL again. Don't guess the path or remove query parameters. |
| Request succeeds, but parsing fails | Whether the response is a login page, error page, or unsupported config format | Check the log message and request a subscription output compatible with v2rayN or v2rayNG. |
| Only some nodes appear | Protocol support, subscription filters, and client compatibility | Clear group filters first, then check the missing nodes' protocols and parameters. Update the client if needed. |
Sometimes a server returns HTTP 200 but puts a login or access-block page in the response body. The request succeeded, but the client can't find a recognizable URI. Fix the subscription URL or contact its provider instead of repeatedly Base64-encoding the page content.
If the provider only offers a full config in a particular format, ask for a subscription that uses compatible share URIs. Converting formats also requires mapping protocol fields, so changing the text encoding alone won't add parameters the client doesn't support.
Keep desktop and Android settings separate when sharing a subscription
You can add the same subscription to v2rayN and v2rayNG, but first check the number of devices and simultaneous connections your provider allows. Both clients fetch from the same URL independently; they don't push configs to each other. After updating one, you still need to update the other.
Share the subscription source, manage local settings separately
Desktop: v2rayN
- Save the same valid URL in Subscription Group Settings.
- After updating, select the current node independently.
- Configure the system proxy, TUN, DNS, and routing separately.
Android: v2rayNG
- Create a separate group in Subscription Group Settings.
- Return to the main screen and update the subscription.
- Manage the VPN connection and per-app proxy settings separately.
What you share is the source of the nodes, not all your device settings. The response may also vary depending on request parameters or how each client recognizes it.
A regular node subscription usually doesn't sync local listening ports, routing rules, DNS policies, or per-app lists, and it isn't a substitute for a full backup. Updating may overwrite manual changes to subscription nodes. For custom settings you need to keep, create a separate manual config and label its purpose clearly.
- Keep one group: Use a single group for each source where possible to reduce duplicate nodes and accidental selections.
- Plan updates carefully: If you need regular updates, check the relevant client setting, update interval, and network conditions. Don't assume automatic updates are enabled by default.
- Handle exposed credentials: If your full subscription URL becomes public, reset its token with the provider and replace the URL in both clients. Changing the group name won't invalidate the old URL.
- Verify the connection: After updating, select a node and test access in an app. Fetching the subscription, connecting to a node, and routing traffic are three separate steps.