com.getorbyt.video.getMix

The viewer's Your Mix, as a skeleton of post URIs to hydrate through the viewer's Bluesky AppView. It blends the viewer's personal generator, their circle (Channels they joined, Channels the people they follow are in, friends of friends) and the people they follow, and it ends: the last page has no cursor and carries `end`. A fresh Mix opens with videos sent to the viewer that they have not watched yet, each with its `send`.

Repository @getorbyt.com did:plc:2xrqztnmzlckb3xfuuukupso namespace authority
Details · query
Kindquery
Authorityvideo.getorbyt.com
Indexed
cid bafyreid3mtgjjwv5v7rjdoomtwzaiw7o3iqsymdxblpj7sl6suhqjsulva

Checks

Valid
JSONDownload
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "The viewer's Your Mix, as a skeleton of post URIs to hydrate through the viewer's Bluesky AppView. It blends the viewer's personal generator, their circle (Channels they joined, Channels the people they follow are in, friends of friends) and the people they follow, and it ends: the last page has no cursor and carries `end`. A fresh Mix opens with videos sent to the viewer that they have not watched yet, each with its `send`.",
      "errors": [
        {
          "description": "Nothing could be read for this page because a source failed. Retry the same cursor; this is not the end of the Mix.",
          "name": "MixUnavailable"
        }
      ],
      "output": {
        "encoding": "application/json",
        "schema": {
          "properties": {
            "cursor": {
              "type": "string"
            },
            "end": {
              "ref": "#mixEnd",
              "type": "ref"
            },
            "feed": {
              "items": {
                "ref": "#mixItem",
                "type": "ref"
              },
              "type": "array"
            }
          },
          "required": [
            "feed"
          ],
          "type": "object"
        }
      },
      "parameters": {
        "properties": {
          "cursor": {
            "type": "string"
          }
        },
        "type": "params"
      },
      "type": "query"
    },
    "mixEnd": {
      "description": "The end card, on the Mix's last page. Copy is the server's; `communities` are Channels to join, best first.",
      "properties": {
        "communities": {
          "items": {
            "ref": "com.getorbyt.community.defs#view",
            "type": "ref"
          },
          "maxLength": 3,
          "type": "array"
        },
        "kind": {
          "description": "`finished`: the viewer saw everything the Mix had. `empty`: the viewer has no circle yet, so the Mix had nothing. Clients style the card from it; an unknown value is treated as `finished`.",
          "knownValues": [
            "finished",
            "empty"
          ],
          "type": "string"
        },
        "subtitle": {
          "maxLength": 300,
          "type": "string"
        },
        "title": {
          "maxLength": 100,
          "type": "string"
        }
      },
      "required": [
        "title",
        "subtitle"
      ],
      "type": "object"
    },
    "mixItem": {
      "properties": {
        "feedContext": {
          "description": "For a post from the personal generator: the generator's own context for it, to send back with interactions (`app.bsky.feed.sendInteractions`) so it keeps learning.",
          "maxLength": 2000,
          "type": "string"
        },
        "generator": {
          "description": "The generator a personal post came from, the feed to send its interactions to.",
          "format": "at-uri",
          "type": "string"
        },
        "post": {
          "format": "at-uri",
          "type": "string"
        },
        "reason": {
          "ref": "#mixReason",
          "type": "ref"
        },
        "reqId": {
          "description": "For a post from the personal generator: the generator's request ID, sent back with interactions.",
          "maxLength": 100,
          "type": "string"
        },
        "send": {
          "description": "For a post sent to the viewer that they have not watched yet: the send, with its sender and note, so the post can show the note. Such posts lead the first page of a fresh Mix.",
          "ref": "com.getorbyt.send.defs#sendView",
          "type": "ref"
        }
      },
      "required": [
        "post"
      ],
      "type": "object"
    },
    "mixReason": {
      "description": "Why a post is in the viewer's Mix, worded by the server. When a post is there for several reasons the server sends the strongest: a send, then people the viewer follows liking it, being in its Channel, or following its author, then a Channel the viewer joined. Clients show `text` as written and may use `kind` and `community` to style or link it; an unknown kind is shown as plain text.",
      "properties": {
        "actors": {
          "description": "The people the viewer follows behind the reason, the one `text` names first: who liked it (`liked`), who is in its Channel (`friendsChannel`), or who follows its author (`friendOfFriend`).",
          "items": {
            "format": "did",
            "type": "string"
          },
          "maxLength": 25,
          "type": "array"
        },
        "community": {
          "format": "at-uri",
          "type": "string"
        },
        "count": {
          "description": "How many people the viewer follows are behind the reason; `actors` may hold fewer.",
          "minimum": 1,
          "type": "integer"
        },
        "kind": {
          "knownValues": [
            "channel",
            "friendsChannel",
            "friendOfFriend",
            "sent",
            "liked"
          ],
          "type": "string"
        },
        "text": {
          "maxLength": 200,
          "type": "string"
        }
      },
      "required": [
        "kind",
        "text"
      ],
      "type": "object"
    }
  },
  "id": "com.getorbyt.video.getMix",
  "lexicon": 1
}