Keep your existing nodes, then check the subscription URL and server response. Next, distinguish a failed network request from a parsing error. This guide covers v2rayN for desktop and v2rayNG for Android. Check the link, update route, format, and system clock in order to identify where the process fails—without repeatedly deleting subscriptions or switching cores.
First, determine whether the content failed to download or parse
“Update failed” describes the result, not the cause. A subscription update typically sends an HTTP request, retrieves text, parses the nodes, and adds them to the relevant group. This is separate from testing a node connection or checking whether Xray or V2Fly starts successfully. When an update fails, look for the earliest error in the client log rather than focusing only on the final “import failed” message.
- No response body received: Check DNS resolution, connection timeouts, proxy routing, TLS certificates, and the HTTP status first.
- Response received, but no nodes imported: Check whether the response is a login page, error message, empty text, or a subscription format the client does not support.
- Update succeeded, but nodes do not work: Check the server address, port, protocol settings, and routing rules. This is no longer a subscription download problem.
1. Copy the subscription URL again and check its authorization
Start by ruling out problems with the URL itself. A subscription URL usually contains an access token; it cannot be replaced with an account homepage, purchase page, or link for a single shared node. Missing query parameters, added line breaks, or changing a literal & to & can invalidate the authorization or point the request to the wrong resource.
-
Keep the existing group
Note the original group and node count. Edit the subscription URL first; don’t delete all servers, in case some existing nodes still work.
-
Copy the dedicated URL
Find the subscription export option in your provider’s account page and choose a format for v2rayN or v2rayNG. Use the copy button instead of piecing together a URL from a chat screenshot or wrapped text.
-
Check the URL is complete
Make sure the scheme, domain, path, and query parameters are intact, and remove surrounding whitespace or quotation marks. If the token has been reset, the old URL usually won’t work; copy the new one.
-
Update only that group
Save the URL, then update only the target group and record the full result. Don’t update several sources at once, or timeouts and authorization errors can get mixed together in the logs.
Opening the subscription URL in a trusted local browser can help show whether it returns text or a file. However, the browser may use login cookies, a different proxy, or trigger a different server response, so a URL opening in a browser does not prove the client can access it. Never paste the full URL into online decoding, speed-test, or conversion sites.
2. Check the HTTP status—and don’t mistake a login page for a subscription
The HTTP status can narrow down the problem, but it cannot prove that the response content is valid. These are standard response codes, not speed-test results. If the client does not show a status code, check its logs. Request records in your provider’s account portal may also help.
| Response | What to check first | Next step |
|---|---|---|
200, body starts with <!DOCTYPE html> | A web page was returned, possibly a login, verification, or error page | Get a new dedicated subscription URL and ask your provider which endpoint supports client requests |
401 or 403 | Invalid credentials, restricted permissions, or an access policy blocking the request | Check the token and account status; a 403 does not necessarily mean the plan has expired |
404 or 410 | The path doesn’t exist or the resource has been removed | Copy the current subscription URL again from your account page |
429 | Too many updates or server-side rate limiting | Stop clicking repeatedly. If the response includes Retry-After, wait as instructed |
5xx | The server or an upstream service failed to process the request | Keep your existing nodes, try again later, and contact your provider |
3. Test updates both with and without a proxy
The subscription domain and node server are different destinations. Working nodes don’t mean the subscription domain is directly reachable, and a subscription downloading successfully doesn’t mean the nodes can connect. v2rayN may offer separate update options for using or bypassing a proxy. Test both; toggling the system proxy alone doesn’t confirm that the subscription request took a different route.
-
Find the subscription settings
In v2rayN, open “Subscription Group” → “Subscription Group Settings” and check the URL for the target group. The wording may vary slightly between interface versions; use the equivalent option in your current window.
-
Test an update without a proxy
Under “Subscription Group,” select “Update current subscription (without proxy).” Test once and note whether it times out, fails certificate validation, or returns an HTTP error.
-
Make sure the proxy works
Select a previously verified working node and start the core, then choose “Update current subscription (through proxy).” If every existing node is down, this route cannot restore the connection on its own.
-
Check the Android group
In v2rayNG, open “Subscription Group Settings” from the top-right menu, check the URL, and save. Return to the main screen, select the target group, then choose “Update current group subscription” from the menu.
-
Retry and compare
In v2rayNG, retry once with the service stopped and once with a working service running, then compare the logs. VPN status alone doesn’t reveal the subscription request route; also check the update options and routing settings for your version.
4. Make sure the encoding matches the subscription format
A typical subscription body contains multiple share links, or the text of those links encoded in Base64. The client must identify the outer content before parsing each node. A vmess:// link may also have its own encoded payload; don’t repeatedly decode the entire response until it “looks like text.”
- List of share links: Check that the decoded text contains schemes supported by the client, such as
vmess://,vless://, ortrojan://, and that each entry is complete. - Error document: A JSON object containing only error fields such as
errorormessageis usually an API response, not a node list to import. - Format mismatch: A YAML configuration or full core JSON configuration may not be parseable as a list of subscription links. Choose the target client’s format in your provider’s export options.
- Corrupted data: Truncated Base64, substituted characters, or an incorrect encoding layer can all cause parsing errors. Retrieve the original response again instead of trying to patch the text manually.
If the response contains blank lines, notices, or unsupported nodes, the client may import only some entries or report an error, depending on its parser. If the updated node count is lower than before, check the import log and the provider’s current response. Don’t assume the client deleted the missing nodes.
Subscription parsing is a client feature; core capabilities matter when running nodes. If VLESS parameters or other protocol fields aren’t recognized, check the client version and export format first. Switching from Xray to V2Fly won’t fix a web page response or corrupted Base64.
5. Use the actual error to diagnose DNS, TLS, and clock issues
The following are snippets of common errors from network or decoding libraries. Capitalization, prefixes, and additional details vary by client version, and these errors may not appear in every client. Keep track of the stage at which the error occurred so you don’t mistake a core connection log for a subscription download log.
Error: No such host is known
Cause: DNS lookup did not return a usable result. The URL may be misspelled, or the issue may be with system DNS or the network.
Fix: Check the subscription domain and retry on the same network. If needed, compare with another trusted network, then adjust DNS for the actual request route.
Error: Connection refused
Cause: The target address refused the connection. If it’s a local address, check whether the local proxy is listening first.
Fix: Check the host and port in the error to determine whether the target is the subscription server or local proxy. Then check the remote service or local core, as appropriate.
Error: x509: certificate has expired or is not yet valid
Cause: The certificate’s validity period doesn’t match the device’s current time. The system clock may be wrong, or the server certificate may actually have expired.
Fix: Correct the system date and time, then try again. If the clock is correct and the error persists, ask your subscription provider to fix the certificate. Don’t disable certificate validation.
Error: illegal base64 data at input byte 0
Cause: The content passed to the Base64 decoder is invalid from the very first character, often because it’s in the wrong format or is a web page response.
Fix: Check the start of the response body and the export format, then retrieve the complete subscription again. The byte position in the actual error may be a different number.
On Windows, go to “Settings” → “Time & language” → “Date & time,” enable automatic time, and sync. On Android, open “Date and time” in system Settings and enable network-provided time; menu names vary by manufacturer. The time zone mainly affects display, so also make sure the actual date and time are correct.
After a successful update: verify the group, then test a node
A success message only confirms that the update process completed. Check that the expected nodes appear in the target group, that you’re not viewing another group, and that there are no duplicates. Select a node and test the connection separately to confirm both subscription import and restored access.
- Group is empty: Check that you selected the right group, that the server didn’t return an empty subscription, and that the logs don’t show every entry failing to parse.
- Nodes are present, but tests fail: Check the server address, port, TLS hostname, and protocol settings. If the subscription updated successfully, don’t keep regenerating the token.
- Only some apps have problems: Check the system proxy, TUN or app-specific proxy settings, and routing rules. This is not a subscription parsing issue.
- Need help: Include the client name and version, operating system, time of failure, update method, and redacted error lines. Hide the full subscription URL, token, node credentials, and account details.
Know when to stop troubleshooting: once the correct response is received and imported successfully, stop changing subscription settings. If authorization has expired or the server is at fault, keep your working configuration and ask your provider to investigate instead of changing DNS, ports, and core settings and widening the scope of the problem.