First, pinpoint the failure: subscription download or config loading

A “subscription update failed” error can occur at three different stages: the client fails to download the content; the server returns content, but it isn't a usable configuration; or the file is saved, but the core finds invalid fields or references when loading it. Each calls for a different fix. If your nodes still connect, that only means the old local config is working—it doesn't prove the subscription URL is still valid.

Keep your working config for now; don't delete the subscription entry. Note the client name, core type, update time, and full error message. Before sharing logs, redact subscription URL path tokens, query parameters, node passwords, and server addresses. Subscription links often function as access credentials.

Log or symptomCheck firstNext step
401、403Authentication, account status, access policyCopy the subscription URL again from your provider's dashboard
404、410Old path, revoked URL, or truncated copyVerify the current URL; don't keep retrying the old one
429Too many requestsStop retrying and wait as directed by your provider
timeout、no such hostConnection route, DNS, network statusTest on your current network and a different one
yaml、unmarshalResponse content and field structureCheck whether you downloaded a web page or an error response

Invalid subscription link: check the URL, account, and HTTP status code

Copy the subscription URL again—not the account page URL

  1. Sign in to your provider's dashboard and check the subscription status, expiration date, and remaining data. Being able to sign in doesn't mean your subscription can still be downloaded.
  2. Choose a subscription option explicitly labeled for Clash or Mihomo. The dashboard page URL in your browser's address bar is not a subscription URL.
  3. Copy the entire link, including the query parameters after ?. Remove any spaces, line breaks, or punctuation accidentally included when copying.
  4. Replace the URL in the existing subscription entry's edit screen, save, then run one manual update. If you reset the subscription key, update the saved link on your other devices too.

401 usually indicates an authentication issue. 403 may also be caused by access controls, regional restrictions, or a protection page, so it doesn't necessarily mean your account has expired. 404 may indicate a bad path, or the provider may be hiding an invalid credential. Check the dashboard status and response content together.

A 200 response can still be an error page

A 200 response only means the HTTP request succeeded. If the body starts with <!DOCTYPE html> or <html>, you may have downloaded a login page, CAPTCHA, or maintenance page. Changing YAML indentation won't help; first obtain the actual subscription response.

Never paste a subscription URL containing credentials into a public checker. If your provider needs to investigate, share the status code, time of the issue, and a redacted error. Send the full URL only through a trusted, private support channel.

Request timeouts: distinguish DNS, TLS, and proxy routing issues

A subscription request may be sent by the client itself or by the core through proxy-providers. They may use different network routes. Being able to browse a site with the system proxy or TUN mode enabled doesn't mean the client's subscription update request uses the same route.

Check each stage of the failure

  • DNS resolution failure: If you see no such host, first check the subscription domain for typos, then check system DNS and your network. Don't replace the domain with an IP address; this can break HTTPS certificate validation and virtual host routing.
  • Connection timeout: A timeout following dial tcp means the connection wasn't established successfully. Try a mobile hotspot to help tell whether the issue is your current network or the server.
  • Response timeout: context deadline exceeded can occur at different stages. If the error also mentions waiting for response headers, check server load and the outbound route instead of focusing only on DNS.
  • TLS error: For x509 errors, expired certificates, or hostname mismatches, first check your device's date, time, and time zone, then ask your provider to resolve the certificate issue. Don't hide the problem by disabling certificate verification.

Compare two update attempts to identify the route

If your client offers a direct or proxied subscription update option, first run a manual update over a direct connection, then try again through an available proxy node. Change only one condition at a time. If direct works but proxy fails, check the selected node and proxy egress. If proxy works but direct fails, check whether your local network can reach the subscription domain.

If all nodes in the current config are down and updates are set to go through one of those nodes, you may have a dependency loop. Switch to a working update route or temporarily use another trusted network to fetch the config. Don't delete your only saved local config first.

Incompatible format: check the full config and proxy providers

Clash YAML, Base64-encoded node links, and single-node URIs are different input formats. Importing a list of ss://, vmess://, or vless:// links as a full YAML subscription can cause parsing errors. A .yaml file extension doesn't guarantee that the content is valid YAML.

Content typeTypical structureUse
Full Clash configproxies or proxy-providers, along with proxy groups, rules, and other settingsLoad as the client config
Proxy provider fileTop-level proxies: node listReferenced by proxy-providers
Rule provider fileUsually a top-level payload:Referenced by rule-providers
List of node linksURI text or its Base64-encoded formImport with a compatible client or convert first

If the download succeeds but loading fails, check core support

Clash and Clash Meta (now called mihomo) don't support exactly the same fields and protocols. If the log reports an unknown proxy type, check whether the subscription output format matches your current core rather than assuming the link is invalid. Ask your provider for a format compatible with your core. If you need to switch clients, first confirm which core the new client uses.

If the log points to a YAML line number, check the indentation, quotes, and list markers on that line and the surrounding lines. If it reports a missing proxy group or rule reference, check that the names in proxy-groups and rules match the node names. Remote subscriptions may overwrite manual edits on every update, so make ongoing changes in the overrides or merge config supported by your client.

When you need to convert formats, use the target format provided by your subscription provider if available. Third-party online converters often require your original subscription URL, which may give them access to your subscription content and credentials. Don't submit it without careful consideration.

Auto-update interval: client settings vs. the interval field

There are two kinds of automatic updates: the client periodically downloads the entire subscription, while the core periodically refreshes proxy providers in the config. The first is usually stored in the client's own subscription metadata; the second is controlled by interval under proxy-providers. They aren't interchangeable.

Set the interval in the client's subscription editor

In a typical Clash Verge Rev interface, go to “Subscriptions” → right-click the target subscription card → “Edit,” then look for the “Update interval” field. Menu labels can vary by release, so follow the actual editor in your version. This field is often measured in minutes. Check the unit shown beside the input before entering a value—don't enter the core's interval in seconds without converting it.

  1. Get a manual update working first, then enable auto-update. Start with 360 minutes (6 hours) and follow your provider's rate limits.
  2. Save your changes and check whether the client has a separate auto-update toggle that needs to be enabled. Don't confuse the latency test interval with the subscription update interval.
  3. Keep the client running and check the next update log. Quitting the app, putting the device to sleep, or OS background restrictions can delay scheduled tasks.

mihomo proxy provider interval is in seconds

This is a proxy provider example, not a complete config. The example domain is for illustration only and won't provide real nodes. Replace it with your own valid URL, and reference the provider from a proxy group using use.

proxy-providers:
  remote-nodes:
    type: http
    url: "https://subscription.example.com/nodes.yaml"
    path: ./providers/remote-nodes.yaml
    interval: 21600

Here, 21600 means 21,600 seconds, or 6 hours. path points to a local cache file; make sure the user running the core can write to that directory. If the URL returns a full config instead of compatible proxy provider content, changing the refresh interval won't fix the format error.

Don't confuse the interval for a url-test proxy group or the proxy provider health-check interval with the subscription refresh interval. Those settings control node availability or latency checks; they don't download the entire subscription. If the log shows 429, lengthen the refresh interval as your provider recommends instead of retrying every 60 seconds.

Verify the update: check that the config, nodes, and rules are in effect

  1. Check the update result: Confirm the target subscription's last-updated time changed and the log no longer reports a download or parsing error. A “request sent” message alone doesn't mean the update finished.
  2. Check the active config: Make sure you're using the subscription you just updated. Updating an inactive config may not change the nodes used by your current connection.
  3. Check nodes and proxy groups: Verify the node count, names, and proxy group references. If a node passes its test but traffic still fails, also check rule matching and outbound selection.
  4. Check the next scheduled update: Note whether the next automatic update runs. If manual updates work but automatic ones fail, check whether the app is running, the schedule settings, and the network at the scheduled time before generating a new link.

If the update still fails, send your provider or client maintainer a redacted report with the client name, core type, time of the error, HTTP status code or exact error message, and results over both direct and proxied connections. Describe network request failures, config format errors, and scheduled tasks that don't run separately.

To check config fields, see the Configuration Reference. For your first subscription import, follow the Quick Start. Back up your config before switching clients to avoid conflating a broken subscription with migration issues.