Two channels, one rule: who set a value can clear it¶
The same keys can arrive two ways — in the subscription response (an HTTP header or a #key: line) and from the provider account (applied to online devices within minutes). They follow one rule:
| Situation | Result |
|---|---|
| The key is in the subscription response | Its value wins and the field is marked “set by the subscription” |
| The key is in the provider account | Its value wins over the subscription’s and the field is marked “set by the account” |
| The key is missing from the account update, and the field was set by the account | The field is cleared — you removed it in the panel, so it disappears in the app |
| The key is missing from the account update, and the field was set by the subscription | The field is kept — the account never clears what the subscription set |
In short: whoever wrote last, wins, and a value can only be removed by the side that put it there. That is how you take an announcement or a banner down — clear it in the panel and it disappears on the next update; the subscription response keeps whatever it sends.
Fields with no “empty” state — the subscription name, brand links, hide-settings — are never auto-cleared; send a new value to change them.
⚠️ This applies to all keys, including bypass (s-fragment, s-noise, s-resolve, s-dns) and routing: if you set s-fragment from the panel and later remove it there, fragmentation switches off on the next update.