Shadowrocket Subscription Update Guide: Manual Refresh, Update on Open, and Troubleshooting

Learn how to refresh subscriptions from Home, enable updates on app launch, and troubleshoot expired links, network errors, and unrecognized formats.

At a glance

This guide is for users who already have their own service provider and subscription URL and need to refresh the server list in Shadowrocket. First refresh manually from Home and check the result, then enable updates on app launch. If an update fails, check the URL, network request, response content, and parsing results in order—subscription update issues and connection issues are not the same.

First, distinguish subscription, app, and configuration updates

A subscription update requests the saved subscription URL again and parses the response into server entries on Home. When your service provider changes server addresses, ports, or authentication details, you need to fetch the updated subscription. Disconnecting and reconnecting the VPN does not fetch it again.

App updates are provided by the App Store and update Shadowrocket itself. Configuration files in Config cover settings such as rules and DNS; updating a remote configuration is a separate operation from refreshing server subscriptions on Home. Before troubleshooting, identify what you need to update.

Home
Check server subscriptions and entries
Config
Check the current configuration file and rules
App Store
Get or update the app

Manually refresh a subscription from Home

When adding a subscription for the first time, use the subscription URL explicitly provided by your service provider—not an account sign-in page, order page, or webpage sharing link. If you already have a subscription, keep the existing entry. Repeatedly deleting and re-adding it to refresh can erase the previous state you need for comparison.

  1. Check the subscription

    Open Home, find the subscription group you want to update, and confirm that it belongs to your service provider. If you haven’t added it yet, tap “+” in the upper-right corner of Home to open the add screen. Set Type to Subscribe, enter your subscription URL in URL, and save.

  2. Note the current state

    Note the number of entries in the target group and the name or port of a known server. Don’t include the full URL, password, or authentication parameters in screenshots; they aren’t needed for public comparisons.

  3. Pull to refresh

    Return to Home and pull down on the list to refresh the subscription. Wait for the request to finish. If you have multiple subscriptions, check each group separately; success for one group does not mean they all updated successfully.

  4. Check the result

    Look for an error message, check that the target group still has entries, and verify any changes announced by your service provider. An unchanged entry count does not necessarily mean the update failed: the response may have changed only addresses, ports, or authentication details.

  5. Test separately

    Select the server you plan to use, then test the connection and access. A successful refresh only confirms that the subscription was fetched and parsed; it doesn’t guarantee that every returned server can connect.

The example below uses a fictional value only to illustrate the structure of a subscription URL. Don’t import it or use it in place of your own URL. Query parameters in real links often provide authentication, so copy the entire URL without adding spaces, line breaks, or non-ASCII punctuation.

https://example.com/sub?token=xxxx

Enable updates when the app opens

After a successful manual refresh, go to Settings → Subscribe, find Update On Open, and turn it on. Labels and capitalization may vary by interface language and app version; use the option for updating when the app opens on the current subscription settings screen.

Pinpoint where the update fails in the request flow

An update involves at least the steps below. Identify where it fails before changing settings; this is usually easier than changing DNS, servers, and configuration files all at once.

Read the subscription URL Resolve the subscription domain Establish a network connection Receive the response Parse the server list
What you seeCheck firstNext step
Immediate 401 or 403 responseAuthentication parameters, URL validity, access restrictionsAsk your service provider to confirm the current subscription URL and access requirements
Request times outCurrent network, domain resolution, server responseKeep the URL unchanged, switch to another available network once, and retry
Request succeeds, but the response can’t be parsedWhether the response is a sign-in page, verification page, or unsupported contentConfirm you copied a subscription URL that the app can import
Refresh completes, but entries are unchangedWhether your service provider actually changed the contentCompare known names, addresses, or ports—not just the entry count
Refresh succeeds, but the connection failsSelected server, authentication details, and connection pathTroubleshoot the connection instead of refreshing the subscription again

Bottom line: distinguish a failed fetch from a failed connection

If the list parsed successfully, check the selected server and connection logs next. If the subscription response wasn’t received, start with the URL and network. Don’t use the same “update failed” label for problems at two different stages.

Common error messages and what to check

The messages below may appear as raw network request errors or HTTP status codes. Wording can vary by system language, server, and app interface. Record the complete error you actually see rather than just noting that it “doesn’t work.”

HTTP 401 Unauthorized

Cause: The server didn’t accept the authentication details in the request. The token may have expired, a parameter may be missing, or you may have copied an old URL.

Fix: Check your account with your service provider for the current subscription URL. Replace the old URL in full, then refresh manually. Don’t guess or construct authentication parameters yourself.

HTTP 403 Forbidden

Cause: The server rejected the request. This may involve account status, restrictions on the source network, or server-side access policies; the status code alone doesn’t prove that the URL has expired.

Fix: Note when it happened, the current network type, and the status code. Ask your service provider to confirm any access restrictions, and avoid rapid repeated retries.

HTTP 404 Not Found

Cause: The subscription path doesn’t exist. Common causes include a truncated URL, a moved subscription endpoint, or an incorrect path.

Fix: Check the entire URL, including the domain, path, and query parameters. Use the current URL shown in your account, then try updating again.

The request timed out.

Cause: The request didn’t finish within the time limit. The delay may occur while establishing a connection, transferring data, or waiting for the server.

Fix: First confirm that your device is online. Then compare once over Wi-Fi and cellular data. If only one network fails, check that network’s access requirements first.

The link opens, but no usable server entries appear

A webpage opening in a browser only proves that it received some kind of response; it doesn’t prove the response is a subscription. Sign-in, account balance, or access verification pages can return HTTP 200, but their content can’t be used as a server list.

Shadowsocks, VMess, VLESS, Trojan, Hysteria2, and WireGuard are protocol names, not switches that convert an ordinary webpage into a subscription. Use the port specified in the response or by your service provider. HTTPS subscription URLs commonly use port 443, but that doesn’t mean every server in the subscription uses 443.

Verify connections and record issues after updating

After updating, first confirm that the selected server on Home is the one you expect, then check Global Routing. Proxy, Direct, Config, and Scene handle traffic differently, and the current mode affects access tests. None of these options refreshes a subscription.

  1. Check the selection: If your service provider removed or renamed an entry, select one that still exists. Don’t base your assessment on an old selection.
  2. Check the routing mode: Verify Global Routing against your intended setup. If you use Config, check the active configuration file in Config. A rule may route the test request to DIRECT instead of the selected proxy.
  3. Test actual access: After connecting, visit a destination you normally use and are permitted to access, then check the connection logs. A successful latency test doesn’t mean every type of request is working.
  4. Keep a brief record: Note the refresh time, exact error, network type, whether the target group changed, and whether you tested the connection. Change only one condition at a time so you can reproduce the issue.
Verify on the App Store →