This guide covers subscription update issues in v2rayN, v2rayNG, and v2flyNG. First distinguish a failed request from a parsing error, then check the link, response format, update route, and system clock. By the end, you should know whether to fix a local setting, get a new subscription, or contact your provider—without repeatedly deleting existing nodes.
First, identify the failure: request or parsing
Updating a subscription involves more than importing it. The client requests the subscription URL, receives a response, identifies its format, parses the nodes, and adds them to the relevant group. A failure at any stage may appear simply as an update error or zero imported nodes. Start by expanding the update result or log and noting the first specific error.
V2Ray and Xray handle traffic as core engines; subscription management and importing content are usually handled by the graphical client. A subscription parsing error therefore does not mean the core failed to start. If your imported nodes still work, keep them rather than turning an update issue into a complete configuration rebuild.
| What you see | Check first | Leave alone for now |
|---|---|---|
| Timeout or DNS resolution failure | Network, DNS, and whether updates use a proxy | Node encryption settings |
| HTTP 401 or 403 | Credentials, account status, and access restrictions | Local node ordering |
| HTTP 200, but parsing fails | Whether the response body is a login or error page | Assuming the content is valid based on the status code alone |
| Update succeeds, but no nodes appear | Subscription content, format compatibility, and group filters | Deleting every group outright |
| Import succeeds, but connections time out | Node settings, core logs, and connection route | Repeatedly updating the subscription |
Check the subscription URL: expiration, truncation, and copy errors
A subscription URL is not an account dashboard address or a share link for a single node. Account dashboards often require a browser login session, so a direct client request may receive a login page. A single-node link usually starts with a protocol name; import it from the client's clipboard import option, not the subscription URL field used for scheduled updates.
-
Keep your current configuration
Note the failed group name and update time, and keep any working nodes. If you need a backup, save it in a secure local folder. Don't send files containing credentials in public chats.
-
Copy the URL again
Copy the complete subscription URL from your provider's account dashboard. Check that it starts with
https://, hasn't been truncated at the end, and contains no extra spaces, line breaks, quotation marks, or non-ASCII punctuation. -
Check the group URL
In v2rayN, open “Subscription Group” → “Subscription Group Settings” and edit the target group to check its URL field. Menu names can vary slightly between versions. Make sure you're editing the group that failed, not another group with a similar name.
-
Check your account status
Check whether the subscription has expired, your data allowance is used up, or the link has been reset. A reset usually invalidates the old URL; update the URL on every client you actually use.
-
Update only the affected group
Update the selected group first, and note the error and number of imported nodes. Once it succeeds, update the other groups. This makes it easier to match errors to their source instead of having several sources fail at once.
Update timeouts: compare direct and proxied requests
Being able to open your account dashboard in a browser doesn't prove the client can fetch the subscription. The browser may use the system proxy, an existing login session, or a different DNS route; the subscription updater may separately use a direct or proxied connection. Run two controlled tests, changing only the update route each time. Don't change DNS, routing, and node settings at the same time.
- Direct update: In v2rayN, open the “Subscription Group” menu and choose “Update All Subscriptions (Without Proxy)”. If your version lets you update a selected group, test only the affected group first.
- Proxied update: Select a verified working node and start the core, then choose “Update All Subscriptions (Through Proxy)”. Enabling the system proxy alone doesn't guarantee that the client's subscription requests will use it.
- Android comparison: In v2rayNG, check the source under “Subscription Group Settings” in the side menu, then choose “Update Subscription” from the main screen menu. Check the current version's subscription settings and logs to confirm whether updates use a proxy; the VPN icon alone isn't enough.
- Compare the results: If direct updates fail but proxied updates work, the direct route to the subscription host is likely the problem. If both return the same 401, check the account or URL instead of switching nodes again.
Use the port shown in the client settings when checking the local proxy. For example, if the local listener is actually on 10808, other proxy settings must not still point to the old 10809. These are example local listening ports, not fixed defaults for every version or remote node ports.
HTTP succeeds, but parsing fails: check the response and format
HTTP 200 means the server returned a successful response; it doesn't guarantee that the response body contains a subscription. Login pages, access verification pages, and account expiration notices can also return 200. If the error mentions Base64, JSON, or no recognizable nodes, check what the response contains before reinstalling the client.
| What the content looks like | What it may mean | What to do |
|---|---|---|
Starts with <!DOCTYPE html> or <html | A webpage, not the expected subscription content | Get the client-specific subscription URL again |
Multiple lines starting with vmess:// or vless:// | A collection of node share links | Check that the client supports the protocols and settings |
| A single block of encoded text | Possibly a Base64-encoded collection of links | Check locally that it's complete; appearance alone doesn't prove it's valid |
| JSON or indented configuration text | Possibly a full configuration or another format | Choose a subscription format supported by your provider for this client |
| An empty response or a response containing only a notice | Account issue or no nodes provided by the server | Ask your provider to check the response and account status |
Base64 is an encoding method, not a node protocol. Common VMess share links encode node information in the URL; VLESS share links use a different structure. A URL being decodable doesn't mean the current client supports all the protocols, transport layers, and security settings it contains.
Don't manually remove every line break or add characters that seem to be missing. Encoding formats handle line breaks and padding differently, and truncated content can't be recovered by mechanically adding characters. A safer approach is to fetch the original response again, then check the output format selected by your provider. If only some nodes fail to import, note their protocols and transport types, and check the client and compatible core versions.
- v2rayN is a desktop configuration manager; node compatibility depends on the selected core and its version.
- v2rayNG uses the Xray core, while v2flyNG uses the v2fly core. Similar app names don't mean their configurations are fully compatible.
- A full core configuration and a graphical client's subscription are different import types. Successfully parsing JSON doesn't mean the client can convert it into a server list.
Use the exact error to guide your next step—don't treat every issue as a parsing failure
Below are common error messages returned by networking tools and runtime environments. The client may show a translated message, add a domain name, or include a stack trace; keep the key phrase when troubleshooting. Start with the first underlying error. “Update failed” is often just a summary of what happened earlier.
Error: Could not resolve host
Cause: The subscription hostname couldn't be resolved, so the request never reached the content-parsing stage.
Fix: Check the hostname in the URL, verify that other websites are reachable on the same network, and compare direct and proxied updates. Changing a node's UUID won't fix a subscription hostname issue.
Error: Connection refused
Cause: The destination explicitly refused the connection. The local proxy may not be listening, or the remote service port may be closed.
Fix: Use the logs to identify whether the refused connection was to a local loopback address or the subscription host. For a local proxy, start the core and check the port. For a remote host, ask your provider to check the service.
Error: certificate has expired
Cause: Certificate validity checks failed. The remote certificate may have expired, or your device's date may be incorrect.
Fix: Correct your system clock and try again. If the time is correct and the error persists, ask your provider to fix the certificate. Don't disable certificate verification.
Error: Invalid length for a Base-64 char array or string.
Cause: The text doesn't meet the decoder's requirements. Common causes include truncated content, receiving a webpage, or using the wrong import format.
Fix: Copy the subscription URL again, make sure the response isn't a login page, and choose a format supported by the client. Adding an equals sign isn't a universal fix.
HTTP 429 usually means the request rate is being limited. Don't keep clicking Update; if the response includes Retry-After, wait as instructed. HTTP 403 doesn't necessarily mean the subscription has expired. It may relate to your network, client request characteristics, or access policies; ask your provider to check the request logs.
System clock and client state: make targeted fixes
An incorrect clock primarily affects HTTPS certificate validation, not Base64 syntax. It can cause an update or parsing failure only if the request consequently fails to retrieve the correct response. Distinguishing these stages helps prevent unnecessary node setting changes when you see a “parsing failed” message.
- Sync the clock: On Windows, open “Settings” → “Time & language” → “Date & time”, check that automatic time is enabled, and sync now. On Android, check automatic time under “Date & time” in system settings; menu locations vary by manufacturer. Verify the actual date and time—a time zone change alone won't correct a clock that's wrong.
- Note the versions: Record the client version and current core version separately. Subscription import and core connections are different stages, so a single version number isn't enough to reproduce the issue.
- Test separately: Keep the original group, create a test group, and update it using the same source. If the test group works, check whether the original group is enabled, along with its URL, filters, and list display settings.
- Check whether changes were saved: If the log shows that nodes were recognized but the list hasn't changed, check whether another group is selected and whether the configuration directory is writable. On Windows, a protected directory or a file in use by another process may prevent saving.
- Consider updating next: Once you've confirmed a format compatibility issue, back up your configuration and update the client and its companion components. Don't drop new core files into an incompatible older directory.
After a successful update, test a node connection. “12 nodes imported successfully” means only that parsing and writing the list completed; the example count doesn't mean the nodes are usable. If a connection fails, check the core logs, server address, port, and transport settings instead of troubleshooting subscription encoding again.
Frequently asked questions and what to include in a report
Why can my browser open the subscription, but the client still fails?
First check whether the browser displays node content or an account webpage. Then compare the client's direct and proxied update options. The browser may have a different login session or proxy route. Even if the browser downloads a file, make sure it's in a subscription format supported by the client.
The list is empty after an update. Does that mean all the nodes are down?
Clear any search terms, check the selected group and filters, then see whether the update result recognized any nodes. An empty response, incompatible format, or list filter can all produce an empty list; that doesn't prove every server-side node is down.
It updates on my phone but not my computer. Do I need to buy another subscription?
First make sure both devices use the same valid source, then compare their networks, update routes, system clocks, and supported formats. Your provider may return different content for different clients, so a successful update on one device only narrows down the problem; it doesn't prove both received the same response.
Can I turn off certificate verification to get it working?
Don't disable certificate verification as a subscription update fix. Sync your clock, check for HTTPS inspection or an authentication page on the network, then ask your provider to fix certificate chain or validity issues. Subscription URLs contain credentials, so verifying the connection is especially important.
If you still can't identify the cause, report one specific failed request rather than just saying “it doesn't work.” The details below are usually enough to help maintainers decide what to check next. Share sensitive information only through a private channel approved by your provider.
- Environment: Operating system, client version, and current core type and version.
- Scope: Whether one group or all groups fail, and whether existing nodes still connect.
- Comparison: Results from direct and proxied updates, and whether switching networks changes anything.
- Response: When it happened, HTTP status code, the first exact error message, and whether the response body was a webpage or subscription text.
- Redact sensitive details: Remove the full subscription URL, access tokens, node passwords, and identity fields. Don't send your entire configuration directory.