How to Fix Clash Subscription Update Failures: Common Errors and Auto-Update Intervals

Troubleshoot failed Clash subscription fetches, including expired links, blocked User-Agents, DNS poisoning, and proxy loops. Get recommended FlClash update intervals and proxy settings.

First, identify which layer failed

When Clash or FlClash shows “Subscription update failed,” the subscription service itself may not be at fault. An update passes through at least four stages: the client reads the subscription URL, the system or mihomo resolves the domain, an HTTPS connection is established directly or through a proxy, and the configuration is downloaded and parsed. If any stage is interrupted, the interface may show only a brief error.

Before troubleshooting, record three details: the exact time of failure, the complete error shown in the interface or logs, and the current network environment. If home broadband works but a mobile hotspot fails, the issue usually points to the network or DNS. If a browser opens the link but the client returns 403, check the request headers or access policy. If the download succeeds but the configuration is rejected, inspect the response body and YAML structure.

Use status codes to narrow it down

  • 401 Unauthorized: The subscription requires valid credentials; the token may have expired.
  • 403 Forbidden: The server rejected the request, commonly because the User-Agent, source IP, or request frequency does not meet its policy.
  • 404 Not Found: The URL path does not exist; the old subscription address may have been replaced.
  • 429 Too Many Requests: Too many refreshes occurred in a short period. Stop manual updates and increase the auto-update interval.
  • 5xx: The subscription server or an upstream gateway is having trouble. Test from another network, then wait for service recovery.
  • timeout or connection reset: The connection was interrupted while being established or during transfer. Continue checking DNS, routing, and the update proxy.
  • invalid character or yaml: unmarshal errors: A response was received, but its contents are not valid Clash YAML that the client can parse.

Check the subscription link, expiry, and response

Subscription URLs usually contain long access tokens. Missing the final character during copying, automatic truncation by a chat app, or an embedded line break can all make the server return an error. Copy the complete URL again from the provider’s dashboard, then edit the corresponding subscription in FlClash’s configuration list instead of repeatedly modifying an old address.

A browser opening the link does not guarantee valid content

After opening a subscription link in a browser, you should see YAML, Base64 text, or a configuration generated for the client type by the server. If the page shows a login screen, CAPTCHA, HTML error page, or a JSON error, the client cannot load it as a Clash configuration even if the download completes. If the response begins with <!doctype html> or <html, you almost certainly received a web page.

On desktop systems, use a command to inspect the status code and response headers. Never post complete output containing a token in a public channel:

curl -L --connect-timeout 10 --max-time 30 \
  -A "clash.meta" \
  -o subscription.yaml \
  -w "HTTP=%{http_code} SIZE=%{size_download} TIME=%{time_total}\n" \
  "https://example.invalid/subscription/token"

Normally, you should get HTTP=200, and the file size should not be zero. A configuration containing dozens of nodes and rules is usually at least several KB; if only 200–500 bytes are downloaded, open the file and check whether it contains an error message. The domain in the command is only an example of the format; use your own subscription address for testing.

Confirm the configuration format and client compatibility

  • When FlClash uses the mihomo core, choose Clash, Clash Meta, or mihomo format whenever possible.
  • Plain text containing only share links such as vmess:// and ss:// cannot necessarily be loaded directly as a complete configuration.
  • If the configuration references rule-providers, make sure the rule-set URLs are reachable as well. A successful main subscription update does not mean that remote rule sets synchronized successfully.
  • If the provider offers both a “Universal subscription” and a “Clash subscription,” choose the option explicitly labeled Clash or mihomo.

Handle blocked User-Agents and request-rate limits

Some subscription services return different formats based on the User-Agent or allow only recognized client identifiers. Browsers use identifiers such as Chrome or Safari, while FlClash or mihomo may send different ones. This can explain why a browser downloads successfully while the client receives 403.

Compare request headers

Send requests to the same address with a common browser identifier and a mihomo identifier, then compare the HTTP status code, file size, and response type. If only one identifier returns 200, the server has request-header rules in place.

curl -L -A "clash.meta" -D headers-meta.txt \
  -o profile-meta.yaml "https://example.invalid/subscription/token"

curl -L -A "Mozilla/5.0" -D headers-browser.txt \
  -o profile-browser.yaml "https://example.invalid/subscription/token"

Start with the provider’s client-type option and regenerate an address intended for Clash. If the current FlClash version offers subscription request-header settings, enter the User-Agent explicitly required by the provider when editing the subscription. Without a clear requirement, avoid testing a long list of identifiers.

429 and overly frequent refreshes

Repeated manual updates, sharing one subscription across multiple devices, or setting the interval to 5 minutes can all trigger rate limits. Subscription contents usually do not change every minute. For personal devices, 24 hours is a sensible default; use 6 hours when nodes change frequently, and shorten it to 1 hour only when the provider explicitly recommends it.

Use case Recommended interval Seconds
Everyday personal devices 24 hours 86400
Frequent node changes 6 hours 21600
Short-term incident monitoring 1 hour 3600

After receiving 429, stop refreshing for at least 15–30 minutes. Continued clicking only extends the restriction window. When multiple devices use the same address, stagger their update times—for example, set the computer for the hour and the phone for half past—to reduce concurrent requests.

Troubleshoot DNS poisoning, certificate errors, and network timeouts

If the subscription domain resolves to the wrong IP address, common symptoms include connection timeouts, connection resets, or a certificate name that does not match the domain. Compare the system result with a trusted DNS result before deciding whether to change FlClash’s DNS settings.

Run two resolution tests

nslookup subscription.example.com
nslookup subscription.example.com 1.1.1.1

If the two results differ substantially, that does not necessarily mean one is wrong, but it is worth comparing them with the routes published by the provider. You can also switch between home broadband and a mobile hotspot: if the same device updates within 2 seconds on the hotspot but times out for 30 seconds on broadband, the issue is more likely the broadband DNS or route than the YAML itself.

In FlClash, open “Settings” → “Parameter Settings” to inspect DNS and the operating mode. After enabling mihomo DNS, make sure the upstream DNS addresses are reachable and that the subscription domain has not been incorrectly mapped to a local address. With DoH, the DoH server’s domain still needs to be resolved during startup, so keep a working default resolution path or provide correct bootstrap resolution for the relevant domains.

Do not overlook system time and the certificate chain

  • A system clock that is off by several hours can cause TLS certificates to be treated as not yet valid or already expired.
  • A captive portal on a public network may intercept the first HTTPS connection; complete network authentication in a browser first.
  • Corporate or campus networks may use HTTPS inspection devices. Have a network administrator verify certificate errors instead of disabling certificate validation.
  • On mobile devices, battery-saver or background-data restrictions may delay scheduled updates even though a manual update works normally after returning to the foreground.

How to handle the update proxy and proxy loops

When the subscription server cannot be reached directly from the current network, updates must use an existing proxy. A new device, however, has no usable nodes on its first import and cannot rely on a subscription that has not yet been downloaded—this is a classic startup dependency. Another possibility is that the client sends the subscription request to a local proxy port while the proxy process waits for that same subscription to finish loading, creating a loop or timeout.

First decide whether to connect directly or use a proxy

  1. Disable the system proxy and test whether the subscription domain can return 200 over a direct connection.
  2. If direct access fails, start an already working local configuration and test through its local mixed port.
  3. A common mixed-port is 7890, but use the value shown under “Settings” → “Parameter Settings” as the actual port.
  4. After a successful update, check the logs to confirm that the request followed the intended policy rather than retrying repeatedly between DIRECT and the proxy.
curl -L --proxy http://127.0.0.1:7890 \
  --connect-timeout 10 --max-time 30 \
  -o subscription.yaml \
  "https://example.invalid/subscription/token"

If the update completes within 3 seconds through the proxy but a direct connection consistently times out after 10 seconds, an update proxy is necessary. Conversely, if the proxy test reports Connection refused, check that FlClash is running, that the mixed-port is actually 7890, and that no other program is using the port.

Keep update traffic away from unavailable policies

For subscription updates, choose a node or policy group that has already been confirmed to work. Do not select a temporary policy that can be created only after the pending subscription update. For the first import, use a direct network, mobile hotspot, or a known-good local configuration to complete startup, then restore your usual rule mode.

TUN mode takes over more system traffic, but it does not automatically solve an unreachable subscription server. If TUN routing, DNS hijacking, and the system proxy are enabled together, focus on which entry point the subscription request ultimately uses. During troubleshooting, temporarily disable TUN and keep one clearly defined HTTP or mixed proxy path. Once updates work, restore TUN and DNS settings one at a time.

Recommended FlClash auto-update settings

Open the configuration management page in FlClash, select the remote subscription, and open its edit screen. Check global network parameters under “Settings” → “Parameter Settings.” Button labels may vary slightly by version, but always verify the subscription URL, auto-update toggle, update interval, and whether updates use a proxy.

A stable setup for everyday devices

  • Auto-update: On.
  • Update interval: 24 hours; use 6 hours when nodes change frequently.
  • Update proxy: Use a direct connection when the subscription domain is reliably reachable; otherwise choose a proxy policy that is already known to work.
  • Update on startup: It does not need to be combined with a short interval; avoid sending duplicate requests after every restart.
  • Retry on failure: Wait at least 5–15 minutes between attempts; do not retry every few seconds.

When using mihomo’s proxy-providers to manage remote nodes, write the update interval in seconds under interval. The example below uses 6 hours and runs node health checks every 10 minutes. Health checks test existing nodes only; they do not redownload the subscription.

proxy-providers:
  remote-nodes:
    type: http
    url: "https://example.invalid/subscription/token"
    path: ./providers/remote-nodes.yaml
    interval: 21600
    health-check:
      enable: true
      url: https://www.gstatic.com/generate_204
      interval: 600

The remote file for proxy-providers should return a collection of proxy nodes. A complete Clash configuration subscription is normally imported through the client’s configuration manager. The two structures differ, so do not assume a complete configuration URL will work when placed in a provider. If parsing fails, verify that the server offers a provider-specific format.

How to verify that auto-update is actually running

  1. Record the last-update time shown on the configuration page.
  2. Run one manual update and confirm that the time, traffic information, or node list changes in a reasonable way.
  3. Wait for one full cycle and check again; do not use the client startup time as the update time.
  4. Check the logs for an HTTP status code, a successful provider update, or a parsing failure.
  5. After the update completes, switch between two nodes and run latency tests to confirm that the new configuration has loaded into the running core.

If the file downloads successfully but the active configuration does not change, the new configuration may have failed validation, the client may still be using another local configuration, or the provider file may not have been reloaded after updating. First confirm the name of the active configuration, then check the loading path in the logs.

Complete the final review by symptom

Symptom Check first What to do
401 or 404 Subscription token and URL Regenerate the address from the provider dashboard
403 User-Agent and source IP Choose Clash format and verify the request policy
429 Update frequency and device count Stop refreshing and switch to a 6–24-hour interval
Connection timeout DNS, routing, and update proxy Compare direct access, hotspot, and mixed-port tests
Certificate error System time and captive network Correct the clock and complete network authentication
YAML parsing failure Response content and subscription format Confirm that the response is not HTML or a login page
Update succeeds but nodes do not change Active configuration and loading path Confirm the current configuration and reload it

The complete troubleshooting sequence can be reduced to six steps: copy the subscription URL again; check the HTTP status code and downloaded content; compare User-Agents; switch networks and verify DNS; test direct access and the local proxy separately; then set a sensible auto-update interval. This sequence covers most Clash, mihomo, and FlClash subscription update failures and helps prevent format issues from being mistaken for core problems.

After fixing the issue, keep a bootable local configuration and record the current mixed-port, DNS mode, and update time. If the problem returns, use the local configuration to establish a stable connection before updating the remote subscription. This is usually faster than repeatedly deleting and reinstalling the client.

FlClash downloads View clients for every platform