{
  "lexicon": 1,
  "id": "com.atproto.label.defs",
  "defs": {
    "label": {
      "type": "object",
      "description": "Metadata tag on an atproto resource (eg, repo or record).",
      "required": ["src", "uri", "val", "cts"],
      "properties": {
        "ver": {
          "type": "integer",
          "description": "The AT Protocol version of the label object."
        },
        "src": {
          "type": "string",
          "format": "did",
          "description": "DID of the actor who created this label."
        },
        "uri": {
          "type": "string",
          "format": "uri",
          "description": "AT URI of the record, repository (account), or other resource that this label applies to."
        },
        "cid": {
          "type": "string",
          "format": "cid",
          "description": "Optionally, CID specifying the specific version of 'uri' resource this label applies to."
        },
        "val": {
          "type": "string",
          "maxLength": 128,
          "description": "The short string name of the value or type of this label."
        },
        "neg": {
          "type": "boolean",
          "description": "If true, this is a negation label, overwriting a previous label."
        },
        "cts": {
          "type": "string",
          "format": "datetime",
          "description": "Timestamp when this label was created."
        },
        "exp": {
          "type": "string",
          "format": "datetime",
          "description": "Timestamp at which this label expires (no longer applies)."
        },
        "sig": {
          "type": "bytes",
          "description": "Signature of dag-cbor encoded label."
        }
      }
    },
    "selfLabels": {
      "type": "object",
      "description": "Metadata tags on an atproto record, published by the author within the record.",
      "required": ["values"],
      "properties": {
        "values": {
          "type": "array",
          "items": { "type": "ref", "ref": "#selfLabel" },
          "maxLength": 10
        }
      }
    },
    "selfLabel": {
      "type": "object",
      "description": "Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.",
      "required": ["val"],
      "properties": {
        "val": {
          "type": "string",
          "maxLength": 128,
          "description": "The short string name of the value or type of this label."
        }
      }
    },
    "labelValueDefinition": {
      "type": "object",
      "description": "Declares a label value and its expected interpretations and behaviors.",
      "required": ["identifier", "severity", "blurs", "locales"],
      "properties": {
        "identifier": {
          "type": "string",
          "description": "The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).",
          "maxLength": 100,
          "maxGraphemes": 100
        },
        "severity": {
          "type": "string",
          "description": "How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.",
          "knownValues": ["inform", "alert", "none"]
        },
        "blurs": {
          "type": "string",
          "description": "What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing.",
          "knownValues": ["content", "media", "none"]
        },
        "defaultSetting": {
          "type": "string",
          "description": "The default setting for this label.",
          "knownValues": ["ignore", "warn", "hide"],
          "default": "warn"
        },
        "adultOnly": {
          "type": "boolean",
          "description": "Does the user need to have adult content enabled in order to configure this label?"
        },
        "locales": {
          "type": "array",
          "items": { "type": "ref", "ref": "#labelValueDefinitionStrings" }
        }
      }
    },
    "labelValueDefinitionStrings": {
      "type": "object",
      "description": "Strings which describe the label in the UI, localized into a specific language.",
      "required": ["lang", "name", "description"],
      "properties": {
        "lang": {
          "type": "string",
          "description": "The code of the language these strings are written in.",
          "format": "language"
        },
        "name": {
          "type": "string",
          "description": "A short human-readable name for the label.",
          "maxGraphemes": 64,
          "maxLength": 640
        },
        "description": {
          "type": "string",
          "description": "A longer description of what the label means and why it might be applied.",
          "maxGraphemes": 10000,
          "maxLength": 100000
        }
      }
    },
    "labelValue": {
      "type": "string",
      "knownValues": [
        "!hide",
        "!warn",
        "!no-unauthenticated",
        "porn",
        "sexual",
        "nudity",
        "graphic-media",
        "bot"
      ]
    }
  }
}
