{
"$type": "com.atproto.lexicon.schema",
"defs": {
"config": {
"description": "Client settings decided by the service. Every value is optional for the client: it keeps a built-in default for each key it reads and ignores keys it does not know.",
"properties": {
"values": {
"description": "Already filtered to the requesting platform and version.",
"items": {
"ref": "#configValue",
"type": "ref"
},
"maxLength": 64,
"type": "array"
}
},
"required": [
"values"
],
"type": "object"
},
"configValue": {
"description": "One setting. Values are strings so new keys need no schema change; the client parses each key it reads and falls back to its default when the value does not parse.",
"properties": {
"key": {
"maxLength": 64,
"type": "string"
},
"value": {
"maxLength": 256,
"type": "string"
}
},
"required": [
"key",
"value"
],
"type": "object"
},
"main": {
"description": "What this deployment of the Orbyt service can currently do, for clients that cannot be upgraded in step with it. Clients feature-detect against `capabilities` rather than comparing version numbers: only one version of this service is ever live, while many client builds run for months. Every field is optional and the whole call is optional — a client that cannot reach it, or reads an older service that does not serve it, must behave exactly as it did before. Unauthenticated.",
"output": {
"encoding": "application/json",
"schema": {
"properties": {
"capabilities": {
"description": "Behaviours this deployment supports, as opaque identifiers a client tests for membership of. Deliberately not `knownValues`: the whole point is that a client meets identifiers it has never heard of and ignores them. Removing one is how a feature is turned off in already-installed clients.",
"items": {
"maxLength": 64,
"type": "string"
},
"maxLength": 128,
"type": "array"
},
"config": {
"description": "Values the client reads instead of building them in, so they can change without a release. Absent from an older service; a client that finds it absent, or a key missing from it, keeps its built-in default.",
"ref": "#config",
"type": "ref"
},
"minimumClient": {
"description": "The oldest client version this service still answers correctly for the requested platform, as a semantic version. Advisory: this service does not refuse older clients, it tells them. A client below it should prompt for an update.",
"maxLength": 32,
"type": "string"
},
"notices": {
"description": "Messages for the viewer, such as a degraded subsystem or a scheduled maintenance window.",
"items": {
"ref": "#notice",
"type": "ref"
},
"maxLength": 8,
"type": "array"
},
"providers": {
"description": "Which external services this deployment is attached to, so a client can aim `atproto-proxy` at them without a release. Absent from an older service; a client that finds it absent keeps its built-in defaults.",
"ref": "#providers",
"type": "ref"
},
"recommendedClient": {
"description": "The newest released client version for the requested platform, so a client can offer a soft update prompt without a separate service.",
"maxLength": 32,
"type": "string"
},
"releaseNotes": {
"description": "What is new in the asking client's own version, for the sheet a client shows once on its first launch after an update. Present only when the request names a platform and a readable version this service has notes for. Absent from an older service; a client that finds it absent shows nothing.",
"ref": "#releaseNotes",
"type": "ref"
}
},
"required": [
"capabilities"
],
"type": "object"
}
},
"parameters": {
"properties": {
"platform": {
"description": "Which client is asking, so version advice can be answered for it. An unknown or absent platform is answered without version advice rather than refused.",
"knownValues": [
"ios",
"web"
],
"type": "string"
},
"version": {
"description": "The asking client's own version, as a semantic version. Lets the service aim `config` values at particular builds, for example to turn something off only in the builds that have a bug. Absent or unreadable is answered as if no build were targeted.",
"maxLength": 32,
"type": "string"
}
},
"type": "params"
},
"type": "query"
},
"notice": {
"description": "One operator message. `id` is stable so a client can remember that this viewer has already dismissed it.",
"properties": {
"id": {
"maxLength": 64,
"type": "string"
},
"message": {
"maxLength": 1000,
"type": "string"
},
"severity": {
"description": "Absent means info. A severity this client does not recognise must be presented as info rather than dropped or treated as blocking.",
"knownValues": [
"info",
"warning",
"blocking"
],
"type": "string"
},
"url": {
"format": "uri",
"type": "string"
}
},
"required": [
"id",
"message"
],
"type": "object"
},
"providers": {
"description": "Service identities only, never operational endpoints. Each service field is absent when this deployment has none; for `appView` that means standard social reads are unavailable and the client should not attempt them.",
"properties": {
"appView": {
"description": "Service DID with fragment answering `app.bsky.*` reads, e.g. `did:web:api.bsky.app#bsky_appview`.",
"maxLength": 256,
"type": "string"
},
"chat": {
"description": "Service DID with fragment for chat.",
"maxLength": 256,
"type": "string"
},
"discoveryFeed": {
"description": "The feed generator behind Your Mix.",
"format": "at-uri",
"type": "string"
},
"discoveryFeedService": {
"description": "Service DID with fragment for `discoveryFeed`.",
"maxLength": 256,
"type": "string"
},
"network": {
"description": "A stable label for the connected network, such as `bluesky`.",
"maxLength": 32,
"type": "string"
}
},
"required": [
"network"
],
"type": "object"
},
"releaseNote": {
"description": "One new thing: a short name and a sentence or two about it.",
"properties": {
"detail": {
"maxLength": 500,
"type": "string"
},
"title": {
"maxLength": 100,
"type": "string"
}
},
"required": [
"title"
],
"type": "object"
},
"releaseNotes": {
"description": "Notes for one released client version. Written by people for people, in the service so they can be written or corrected without a release.",
"properties": {
"items": {
"description": "What is new, most important first.",
"items": {
"ref": "#releaseNote",
"type": "ref"
},
"maxLength": 8,
"minLength": 1,
"type": "array"
},
"version": {
"description": "The version these notes describe, as a semantic version. A client shows them only when it is its own version.",
"maxLength": 32,
"type": "string"
}
},
"required": [
"version",
"items"
],
"type": "object"
}
},
"id": "com.getorbyt.getServiceInfo",
"lexicon": 1
}