New to response headers? Follow one setting from your panel to the app in the interactive walkthrough.
Serve a subscription response
Use an HTTPS endpoint that returns a complete Mihomo YAML configuration with 200 OK. The current client requests this URL directly when a user adds or refreshes a profile.
HTTP/1.1 200 OK
Content-Type: text/yaml; charset=utf-8
profile-update-interval: 6
subscription-userinfo: upload=1073741824; download=9663676416; total=107374182400; expire=1811462400 The YAML body follows the headers. Use Mihomo’s configuration reference for the profile itself.
Identify the client and device
The current client sends User-Agent: clash-meta. It also sends the following device headers when their values are available:
| Header | Purpose |
|---|---|
x-hwid | Device identifier for a provider’s device accounting. |
x-device-os | Operating system name. |
x-ver-os | Operating system version. |
x-device-model | Device model information. |
The user agent identifies a compatible configuration format; it is not a unique Mihonator identifier. Avoid assuming that every clash-meta request comes from this application.
Quota, expiry, and refresh
subscription-userinfo
A semicolon-separated list. upload, download, and total are byte counts. expire is a Unix timestamp in seconds. The client uses this data for the profile’s quota and expiry rows.
Without a positive total, the UI cannot derive a remaining-traffic percentage. Omitted expiry data does not define an expiry date.
profile-update-interval
A positive integer in hours. For example, 6 requests a refresh interval of six hours. The profile screen checks elapsed intervals periodically while active. This header does not create an operating-system background job.
Report device-limit problems
The client records x-hwid-active, x-hwid-limit, and x-hwid-not-supported from the subscription response. Values are case-insensitive booleans.
When x-hwid-active: true and x-hwid-limit: true are both present, the current client reports a device-limit problem instead of attempting to use a stripped profile. The not-supported flag is retained as diagnostic metadata.
Next: your service’s appearance. The customization contract describes palette, identity, home layout, and purchase links using the mihonator-* headers.