## Requirements and use cases
This document describes an API that addresses a specific requirement: Communicate the user's preferences regarding data savings through both a JS API as well as a Client Hint.
**Example use cases:**
* A web application which primary purpose is to stream media could provide highly compressed media content if the user is interested in reducing their data costs.
* A web application presenting the user with background videos can choose to use background images instead, based on the user's preference.
## NavigatorNetworkInformation interface
The NetworkInformation
interface exposes access to saveData by mixing in NetworkInformationSaveData.
interface mixin NetworkInformationSaveData { [SameObject] readonly attribute boolean saveData; }; NetworkInformation includes NetworkInformationSaveData;### saveData attribute The saveData attribute, when getting, returns `true` if the user has requested a reduced data usage mode from the user agent, and `false` otherwise.
The user may enable such preference, if made available by the user agent, due to high data transfer costs, slow connection speeds, or other reasons.
####Save-Data
Request Header Field
The SaveData request header is a Client Hint [[CLIENT-HINTS]]. The header's value is an `sh-list` [[STRUCTURED-HEADERS]] which contains `token`s, indicating the user agent's preference for reduced data usage.
Save-Data = sh-listThis specification defines the "`on`" `token` value, which is used as a signal indicating explicit user opt-in into a reduced data usage mode (i.e. when saveData's value is `true`), and when communicated to origins allows them to deliver alternate content honoring such preference - e.g. smaller image and video resources, alternate markup, and so on. In case of multiple conflicting tokens in the list, the latest token takes precedence.