{
  "lexicon": 1,
  "id": "app.bsky.graph.defs",
  "defs": {
    "listViewBasic": {
      "type": "object",
      "required": ["uri", "cid", "name", "purpose"],
      "properties": {
        "uri": {
          "type": "string",
          "format": "at-uri"
        },
        "cid": {
          "type": "string",
          "format": "cid"
        },
        "name": {
          "type": "string",
          "maxLength": 64,
          "minLength": 1
        },
        "purpose": {
          "type": "ref",
          "ref": "#listPurpose"
        },
        "avatar": {
          "type": "string",
          "format": "uri"
        },
        "listItemCount": {
          "type": "integer",
          "minimum": 0
        },
        "labels": {
          "type": "array",
          "items": {
            "type": "ref",
            "ref": "com.atproto.label.defs#label"
          }
        },
        "viewer": {
          "type": "ref",
          "ref": "#listViewerState"
        },
        "indexedAt": {
          "type": "string",
          "format": "datetime"
        }
      }
    },
    "listView": {
      "type": "object",
      "required": ["uri", "cid", "creator", "name", "purpose", "indexedAt"],
      "properties": {
        "uri": {
          "type": "string",
          "format": "at-uri"
        },
        "cid": {
          "type": "string",
          "format": "cid"
        },
        "creator": {
          "type": "ref",
          "ref": "app.bsky.actor.defs#profileView"
        },
        "name": {
          "type": "string",
          "maxLength": 64,
          "minLength": 1
        },
        "purpose": {
          "type": "ref",
          "ref": "#listPurpose"
        },
        "description": {
          "type": "string",
          "maxGraphemes": 300,
          "maxLength": 3000
        },
        "descriptionFacets": {
          "type": "array",
          "items": {
            "type": "ref",
            "ref": "app.bsky.richtext.facet"
          }
        },
        "avatar": {
          "type": "string",
          "format": "uri"
        },
        "listItemCount": {
          "type": "integer",
          "minimum": 0
        },
        "labels": {
          "type": "array",
          "items": {
            "type": "ref",
            "ref": "com.atproto.label.defs#label"
          }
        },
        "viewer": {
          "type": "ref",
          "ref": "#listViewerState"
        },
        "indexedAt": {
          "type": "string",
          "format": "datetime"
        }
      }
    },
    "listItemView": {
      "type": "object",
      "required": ["uri", "subject"],
      "properties": {
        "uri": {
          "type": "string",
          "format": "at-uri"
        },
        "subject": {
          "type": "ref",
          "ref": "app.bsky.actor.defs#profileView"
        },
        "subjectOptedOut": {
          "type": "boolean",
          "const": true,
          "description": "Set to true when the subject has opted out of appearing in the reference list. Only set when the viewer owns the list."
        }
      }
    },
    "starterPackView": {
      "type": "object",
      "required": ["uri", "cid", "record", "creator", "indexedAt"],
      "properties": {
        "uri": {
          "type": "string",
          "format": "at-uri"
        },
        "cid": {
          "type": "string",
          "format": "cid"
        },
        "record": {
          "type": "unknown"
        },
        "creator": {
          "type": "ref",
          "ref": "app.bsky.actor.defs#profileViewBasic"
        },
        "list": {
          "type": "ref",
          "ref": "#listViewBasic"
        },
        "listItemsSample": {
          "type": "array",
          "maxLength": 12,
          "items": {
            "type": "ref",
            "ref": "#listItemView"
          }
        },
        "feeds": {
          "type": "array",
          "maxLength": 3,
          "items": {
            "type": "ref",
            "ref": "app.bsky.feed.defs#generatorView"
          }
        },
        "joinedWeekCount": {
          "type": "integer",
          "minimum": 0
        },
        "joinedAllTimeCount": {
          "type": "integer",
          "minimum": 0
        },
        "labels": {
          "type": "array",
          "items": {
            "type": "ref",
            "ref": "com.atproto.label.defs#label"
          }
        },
        "indexedAt": {
          "type": "string",
          "format": "datetime"
        }
      }
    },
    "starterPackViewBasic": {
      "type": "object",
      "required": ["uri", "cid", "record", "creator", "indexedAt"],
      "properties": {
        "uri": {
          "type": "string",
          "format": "at-uri"
        },
        "cid": {
          "type": "string",
          "format": "cid"
        },
        "record": {
          "type": "unknown"
        },
        "creator": {
          "type": "ref",
          "ref": "app.bsky.actor.defs#profileViewBasic"
        },
        "listItemCount": {
          "type": "integer",
          "minimum": 0
        },
        "joinedWeekCount": {
          "type": "integer",
          "minimum": 0
        },
        "joinedAllTimeCount": {
          "type": "integer",
          "minimum": 0
        },
        "labels": {
          "type": "array",
          "items": {
            "type": "ref",
            "ref": "com.atproto.label.defs#label"
          }
        },
        "indexedAt": {
          "type": "string",
          "format": "datetime"
        }
      }
    },
    "listPurpose": {
      "type": "string",
      "knownValues": [
        "app.bsky.graph.defs#modlist",
        "app.bsky.graph.defs#curatelist",
        "app.bsky.graph.defs#referencelist"
      ]
    },
    "modlist": {
      "type": "token",
      "description": "A list of actors to apply an aggregate moderation action (mute/block) on."
    },
    "curatelist": {
      "type": "token",
      "description": "A list of actors used for curation purposes such as list feeds or interaction gating."
    },
    "referencelist": {
      "type": "token",
      "description": "A list of actors used for only for reference purposes such as within a starter pack."
    },
    "listViewerState": {
      "type": "object",
      "properties": {
        "muted": {
          "type": "boolean"
        },
        "blocked": {
          "type": "string",
          "format": "at-uri"
        },
        "referenceListOptOut": {
          "type": "string",
          "format": "at-uri",
          "description": "The authenticated viewer's app.bsky.graph.referencelistoptout record URI for this reference list. Only set for reference lists. A client can delete this record to undo the opt-out."
        }
      }
    },
    "notFoundActor": {
      "type": "object",
      "description": "indicates that a handle or DID could not be resolved",
      "required": ["actor", "notFound"],
      "properties": {
        "actor": {
          "type": "string",
          "format": "at-identifier"
        },
        "notFound": {
          "type": "boolean",
          "const": true
        }
      }
    },
    "relationship": {
      "type": "object",
      "description": "lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object)",
      "required": ["did"],
      "properties": {
        "did": {
          "type": "string",
          "format": "did"
        },
        "following": {
          "type": "string",
          "format": "at-uri",
          "description": "if the actor follows this DID, this is the AT-URI of the follow record"
        },
        "followedBy": {
          "type": "string",
          "format": "at-uri",
          "description": "if the actor is followed by this DID, contains the AT-URI of the follow record"
        },
        "blocking": {
          "type": "string",
          "format": "at-uri",
          "description": "if the actor blocks this DID, this is the AT-URI of the block record"
        },
        "blockedBy": {
          "type": "string",
          "format": "at-uri",
          "description": "if the actor is blocked by this DID, contains the AT-URI of the block record"
        },
        "blockingByList": {
          "type": "string",
          "format": "at-uri",
          "description": "if the actor blocks this DID via a block list, this is the AT-URI of the listblock record"
        },
        "blockedByList": {
          "type": "string",
          "format": "at-uri",
          "description": "if the actor is blocked by this DID via a block list, contains the AT-URI of the listblock record"
        }
      }
    }
  }
}
