Read the caller's Region and Input settings, with the install defaults (amendment 49, #845).
const url = 'http://localhost:8080/v1/me/region-input';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}use reqwest;
#[tokio::main]pub async fn main() { let url = "http://localhost:8080/v1/me/region-input";
let mut headers = reqwest::header::HeaderMap::new(); headers.insert("Authorization", "Bearer <token>".parse().unwrap());
let client = reqwest::Client::new(); let response = client.get(url) .headers(headers) .send() .await;
let results = response.unwrap() .json::<serde_json::Value>() .await .unwrap();
dbg!(results);}curl --request GET \ --url http://localhost:8080/v1/me/region-input \ --header 'Authorization: Bearer <token>'See control-api.md §Region and Input settings. Self only: no admin variant. A user who has saved nothing reads every field null.
Authorizations
Section titled “Authorizations”Responses
Section titled “Responses”OK.
object
object
An IANA zone name the control plane’s tz database knows, backward-compatible links included, other than Local. Reaches the container as TZ.
A language and region, e.g. de-DE. Reaches the container as LANG=de_DE.UTF-8.
As language; reaches the container as LC_TIME, LC_NUMERIC, LC_MONETARY, LC_MEASUREMENT and LC_PAPER. null in defaults = the same as the language.
object
Client only. auto = on for an app of kind desktop, off for every other kind.
Client only. Multiplies relative mouse movement.
Client only. Pointer lock with unadjustedMovement where the browser has it.
Client only. Reverses the wheel direction before sending.
Client only. Swaps gamepad A with B and X with Y before sending.
The install defaults (GET /v1/admin/settings default_*). Every field has a value except region.region_format.
object
object
An IANA zone name the control plane’s tz database knows, backward-compatible links included, other than Local. Reaches the container as TZ.
A language and region, e.g. de-DE. Reaches the container as LANG=de_DE.UTF-8.
As language; reaches the container as LC_TIME, LC_NUMERIC, LC_MONETARY, LC_MEASUREMENT and LC_PAPER. null in defaults = the same as the language.
object
Client only. auto = on for an app of kind desktop, off for every other kind.
Client only. Multiplies relative mouse movement.
Client only. Pointer lock with unadjustedMovement where the browser has it.
Client only. Reverses the wheel direction before sending.
Client only. Swaps gamepad A with B and X with Y before sending.
PATCH response only: true when this change stopped the caller’s parked session.
Example
{ "input": { "match_cursor": "auto" }, "defaults": { "input": { "match_cursor": "auto" } }}Missing/invalid/expired/revoked token.
object
object
E.g. validation_failed, unauthorized, forbidden, not_found, conflict, session_quota_exceeded, home_in_use, home_not_provisioned, parent_app_disabled, profile_ineligible, profile_not_launchable_for_app, no_host_available, capacity_exhausted, host_not_ready, restart_required, stale_revision, unsupported_source, approval_superseded, approval_expired, attempt_conflict, cancel_too_late, retry_exhausted, home_conflict, placement_ineligible, inherited_placement, recovery_uncertain, rate_limited, internal. Open string, not an enum: new codes are additive and an unknown one falls through to a client’s generic per-status branch.
Present on restart_required.
Steam library discovery Phase 3, ADDITIVE: present on home_in_use when the guard could name the CONFLICTING live session - the one already holding the home. It is here so the client can offer “go to your running session” with a link instead of a dead-end toast. OMITTED rather than empty when the conflict is known but the session is not, so a client branches on presence and never renders a link to nowhere. Also omitted when the holder is the caller’s parked session or released runtime (amendment 39). Load-bearing once derived tiles exist: the lock is held by the PARENT’s home, so a user who clicks a game tile can be refused because a DIFFERENT app (the Steam launcher, or another game from the same install) is running, and without the session id the refusal reads as a bug. See control-api.md §Derived tiles.
Steam library discovery Phase 3, ADDITIVE: present on the 409 conflict from DELETE /v1/apps/{id} when the app has derived tiles and ?delete_derived=true was not sent. A LIST, not a count - the point of the confirmation is that the admin sees what they are about to destroy. Capped; an empty array means the tiles could not be listed, never that there are none.
object
Amendment 40 (#602), ADDITIVE: a machine-readable cause under code. On 503 no_host_available, home_host_unavailable: the launch is pinned to the host that holds the caller’s home for this app (Amendment 53: or it is pinned to the host of the caller’s Steam home for a sharing launch) and that host is offline or no longer enrolled. Only an admin clears it, so a client does not spend its automatic retry on it. Names no host. Amendment 53 (#1001), on 409 home_in_use: steam_library_open_in_desktop (the holder mounts the Steam library as a shared home) or steam_game_running (the refused launch shares the library and a Steam session holds it); absent when the holder is already stopping. Open string: a client treats an unknown value as absent.
Examplegenerated
{ "error": { "code": "example", "message": "example", "live_sessions": 1, "session_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "derived_tiles": [ { "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "name": "example" } ], "reason": "example" }}