at.upvote.comment

upvote.at

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "A Markdown comment on a canonical subject or a reply to another comment.",
      "key": "tid",
      "record": {
        "properties": {
          "createdAt": {
            "description": "Client-declared timestamp when the comment was created.",
            "format": "datetime",
            "type": "string"
          },
          "facets": {
            "description": "Annotations over text, especially DID-backed mentions. Indices count UTF-8 bytes.",
            "items": {
              "ref": "app.bsky.richtext.facet",
              "type": "ref"
            },
            "maxLength": 100,
            "type": "array"
          },
          "labels": {
            "description": "Self-applied content labels.",
            "refs": [
              "com.atproto.label.defs#selfLabels"
            ],
            "type": "union"
          },
          "langs": {
            "description": "BCP 47 language tags for the human-language comment text.",
            "items": {
              "format": "language",
              "type": "string"
            },
            "maxLength": 3,
            "type": "array"
          },
          "rootSubject": {
            "description": "Author-declared discussion resource. The subject is the immediate parent; verify ancestry before using the root for visibility or moderation.",
            "format": "uri",
            "type": "string"
          },
          "subject": {
            "description": "For a top-level comment, the canonical URI used by at.upvote.signal.subject. For a reply, the AT URI of its direct at.upvote.comment parent.",
            "format": "uri",
            "type": "string"
          },
          "text": {
            "description": "Markdown source. Facet byte ranges refer to this unrendered UTF-8 text.",
            "maxGraphemes": 5000,
            "maxLength": 50000,
            "minGraphemes": 1,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "subject",
          "text",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    }
  },
  "id": "at.upvote.comment",
  "lexicon": 1
}

Validate Record

Validate a record against at.upvote.comment

Validation Options
Automatically resolve and include external schemas for full validation
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:b2bmihikxhdt6s2luzguhexb
CID
bafyreigo3jubdw6tsk2kkc4rfnenn4j5flg2uzwdstr7bdpdli3gqlupey
Indexed At
2026-09-15 20:31 UTC
AT-URI
at://did:plc:b2bmihikxhdt6s2luzguhexb/com.atproto.lexicon.schema/at.upvote.comment

Referenced Schemas (2)

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • A public Supper comment attached directly to a site.standard.document, support.supper.feed.post, fm.plyr.track, or support.supper.poll.poll. The record is authored in the commenter's repository; its subject identifies t…

  • Comment on a wips.social update. Top-level comments omit parent; replies set parent to the immediate comment being answered. subject always points at the root update. Body may be text, ordered media, or both (applicatio…

  • A reply to a forum topic or another reply, with threaded parent references and community attribution.

  • A comment on a node, owned by its author.

  • A comment on a post or another comment. Comments live in user repositories and support nested threading.

Lexicon Garden

@