For users with their own provider subscription who see update timeouts, parse errors, or an empty node list in Shadowrocket. First distinguish a failed request from an unexpected response, then check the URL, account status, and request route. Only consider importing again after confirming the original subscription is valid, so you don't delete old nodes that still work.
1. Tell an Update Failure from an Empty Node List
A subscription update has three steps: reaching the subscription URL, receiving a response, and parsing that response into nodes. A failure at any step can leave the expected nodes missing from Home, but each calls for a different fix. If old nodes are still listed and a refresh returns an error, first check whether the request succeeded. If no nodes appear after the first import, also verify that the response actually contains a node subscription.
An “update successful” message does not mean the nodes can connect. It means the subscription request and parsing completed; connectivity also depends on the node address, port, authentication parameters, and current network. This guide focuses on restoring the list. Once it is back, test the connection separately.
Decision: Keep old nodes if they still work
If an old node still connects, refresh only the affected subscription and note the error. Don't clear Home first. This preserves a working connection and helps determine whether the issue is with the subscription update or the node itself.
2. Check the URL and Subscription Type
A subscription URL retrieves a node list; it is not an account login page or the provider's homepage. Copy it using the subscription option in your own provider account, then check the scheme, domain, path, and query parameters after the question mark. Line breaks, trailing periods, quotation marks, or truncated links in chat apps can turn a URL that looks right into a different address.
https://example.com/sub?token=xxxx
The example above illustrates a format only; it is not a working subscription. Actual URLs may use different paths or parameter names, so don't edit yours to match the example. In particular, don't remove anything after ? or manually replace &, =, or percent-encoded characters. Subscription credentials may be part of the path and may not be named token.
-
Copy the URL again
Copy the Shadowrocket subscription URL from your own provider account. If there are multiple format options, choose the one the provider recommends for Shadowrocket. Don't copy the account management page URL.
-
Check the subscription type
Tap “+” in the upper-right corner of Home to open the add screen, then set Type to Subscribe. A single node's share link is different from a subscription URL containing multiple nodes. Don't enter a webpage address as a server address for a protocol.
-
Check the URL field
Paste the full URL into URL and check for spaces, line breaks, or extra punctuation at either end. You can set a name that's easy to recognize, but don't put the full credentials in it.
-
Save and refresh
After saving, return to Home and update the subscription. If you pull to refresh, check the result for the intended subscription, then look for nodes in its group. While troubleshooting, change only this subscription to avoid affecting other sources.
3. Check Provider Status Based on the Response
If the error message includes an HTTP status code, use it to narrow down the cause. The codes below describe standard server responses; not every version displays the same full error text. If the app shows only a generic failure, note the exact message and ask your provider what happened with the request.
Error: 401 Unauthorized
Cause: The server did not accept the authentication details in the request. The subscription credentials may have expired.
Fix: Check your provider account to see whether the credentials were reset. Copy the current subscription URL and try updating again.
Error: 403 Forbidden
Cause: The server denied access. This may relate to account permissions, source restrictions, or security controls; the code alone does not mean your plan has expired.
Fix: Check your account status, then give your provider the error code and time it occurred. Ask them to confirm any access restrictions on the subscription endpoint.
Error: 404 Not Found
Cause: The requested path does not exist. This often happens when an old subscription URL has expired, was copied incompletely, or the provider has changed the path.
Fix: Get the current subscription URL again and check the domain and path. Don't guess the new endpoint yourself.
Error: 429 Too Many Requests
Cause: The subscription endpoint is limiting the number of requests made in a short period.
Fix: Stop refreshing repeatedly. Wait as instructed by your provider or by the Retry-After response header, then try one manual update.
Error: 503 Service Unavailable
Cause: The server or its gateway is temporarily unable to process the request.
Fix: Check your provider's maintenance notices, keep your existing nodes, and try again when service is restored. There's no need to rebuild your entire configuration.
Also check whether your account is active, your data allowance is exhausted, or your current plan includes any available nodes. Providers may respond with an error code, a message, or an empty list; don't assume they'll all report problems the same way. If opening the URL in a browser shows a login page, security check, or account notice, an HTTP 200 response still doesn't mean the content can be parsed as nodes. And what you see in a browser isn't necessarily the same response the app receives.
- Empty response body: Check whether the subscription endpoint is temporarily unavailable and whether nodes are assigned to your account.
- HTML page returned: Make sure you copied the subscription endpoint, not a webpage that requires an interactive login.
- Readable text returned, but parsing fails: Ask your provider to confirm the output format is compatible with Shadowrocket. Don't mix incompatible configuration formats.
4. For Timeouts, Check the Request Route Before the Timing
A timeout means the request did not finish within the allotted time; it does not prove the URL has expired. First check that your current Wi-Fi or mobile network can access other websites. If you're on public Wi-Fi, complete its network sign-in first. Trying the same subscription once on another network can help distinguish a local network restriction from a subscription server issue.
Subscription requests don't necessarily follow the same route as node tests. In Settings → Subscribe, Update via Proxy determines whether subscription updates are sent through a proxy. This may help with direct-access restrictions only if a working node already exists, a connection is established, and the request can reach the subscription endpoint. If this is your first import and the list is completely empty, you can't rely on a node that doesn't exist yet to update the subscription.
| What you see | Check first | Next step |
|---|---|---|
| Times out on Wi-Fi; updates on mobile data | Wi-Fi sign-in, DNS, and access restrictions | Update on a working network first, then troubleshoot the original network |
| Times out after enabling proxy updates | Whether the current node works and the update request is routed correctly | Note the original setting, temporarily turn off Update via Proxy, and test a direct update |
| Direct update fails, but an existing proxy connection works | Whether the subscription endpoint is restricted on the current network | Turn on Update via Proxy in Settings → Subscribe and test once |
| 429 appears after repeated refreshes | Endpoint rate limits and automatic background updates | Stop retrying manually and wait for the limit to clear before updating again |
If the connection toggle turns itself back on soon after you switch it off, check Settings → On Demand for automatic connection conditions. It controls when a connection starts; it cannot turn an incorrect URL into a valid subscription. Note the original settings and temporarily turn this off only if you need fixed test conditions. Restore it afterward. Don't keep switching Global Routing at random, either: Proxy, Direct, Config, and Scene control how traffic is handled; they don't convert subscription formats.
5. If the Node List Is Empty, Check the Group and Response
After refreshing, return to Home and make sure you're viewing the group for the subscription you just updated. Expand collapsed groups and clear any search filters. A collapsed group or uncleared search can hide nodes without the subscription actually returning zero. If other subscriptions work and only one group is empty, focus on that source rather than resetting every subscription.
- Group exists but is empty: Ask your provider to confirm the response actually includes nodes, not just data usage details, an expiration notice, or an empty body.
- Some nodes appear, others are missing: Check the subscription's filters, the provider's output, and whether the missing entries use a supported format.
- Nodes appear but won't connect: The list retrieval issue is separate from the connection problem. Next, check the address, port, and authentication parameters for the relevant protocol.
- Fewer nodes appear after a refresh: Check whether the provider changed the node list. A smaller list does not automatically mean the client failed to parse it.
Decision: HTTP 200 with an empty list? Check the server response first
If the request succeeded but the list is still empty after clearing the search and expanding the group, ask your provider to check the subscription output for your account. Don't keep changing Global Routing or reinstalling the app.
6. What to Keep Before Importing Again
Importing again can replace an outdated URL or fix an incorrect local entry, but it won't fix a provider endpoint issue. Before deleting an old subscription, make sure you can retrieve the full URL again and note any manually added nodes, existing group names, and the currently selected node. If the subscription still has working nodes, keep the original entry if possible so you don't remove a connection that still works.
- Save the error details: Note the exact message, when it occurred, which network you used, and whether the update went through a proxy. “It doesn't work” isn't enough detail.
- Confirm the current URL: Copy it again from your provider account. Don't reuse an old link saved in a chat history.
- Check the account output: Confirm the account is active, the endpoint is working, and the URL should return at least one usable node.
- Test the new entry separately: If you need to add it again, go to Home → “+” → Type → Subscribe, use a distinct name, and test the update once.
- Clean up after testing: Delete an old subscription only after the new entry shows nodes and the connection test works as expected. Don't delete entries in bulk just because they have the same name.
If the issue persists, share these details with your provider and clarify whether the problem is a “request timeout,” an “HTTP error,” or a “successful request with an empty list.” These details are more useful for initial diagnosis than a screenshot containing the full URL. If credentials need to be changed, use your provider's secure support channel.
7. Frequently Asked Questions
The website opens. Why won't the subscription update?
A regular webpage and a subscription endpoint may use different domains, authentication, and access policies. Check the full URL first, then check the status of Settings → Subscribe → Update via Proxy. Record the results for both direct updates and updates over an existing working proxy connection.
An update failed. Should I delete all my nodes right away?
No. Keep the old nodes and refresh only the subscription that's failing. If an old node still connects, leave it in place. Clean up only after confirming the new subscription imported successfully and the old entry no longer works.
I reset the subscription URL. Will the old one still work?
The provider decides when the old URL stops working. Copy the current URL and replace the one in the old entry. Logging in to your account again does not automatically update the credentials saved in Shadowrocket.
The update succeeded, but I still can't access the internet. What should I check next?
First, select the node you want to use in Home and run Connectivity Test. Then check Global Routing: if you need rule-based routing, check Config and the Rule in the active configuration. Direct does not proxy ordinary requests. A successful subscription update does not guarantee that a node can connect or that a rule will match.
Get Shadowrocket and follow the initial setup steps
The iPhone and iPad version costs $2.99 as a one-time App Store purchase. The developer is Shadow Launch Technology Limited; check the App Store listing for system requirements. The Mac (Apple silicon and Intel), Windows, Android, and Linux versions are free. Visit the download page for your device, then configure Shadowrocket with a subscription you already have.