{
  "lexicon": 1,
  "id": "app.bsky.notification.getGroupedNotifications",
  "defs": {
    "main": {
      "type": "query",
      "description": "[UNSTABLE - DO NOT USE THIS ENDPOINT WHILE THIS NOTE IS HERE] Enumerate notifications for the requesting account, pre-grouped for rendering. Supersedes listNotifications. Requires auth.",
      "parameters": {
        "type": "params",
        "properties": {
          "feed": {
            "type": "string",
            "description": "Which notification feed to return. Grouping behavior varies by feed: notifications about follows might be grouped in 'all' and ungrouped (or rather, in single-item groups) in 'followers'.",
            "maxLength": 32,
            "knownValues": [
              "all",
              "people-i-follow",
              "conversations",
              "followers",
              "activity"
            ],
            "default": "all"
          },
          "limit": {
            "type": "integer",
            "description": "Maximum number of groups to return.",
            "minimum": 1,
            "maximum": 50,
            "default": 30
          },
          "cursor": { "type": "string", "maxLength": 1024 }
        }
      },
      "output": {
        "encoding": "application/json",
        "schema": {
          "type": "object",
          "required": ["groups"],
          "properties": {
            "cursor": { "type": "string", "maxLength": 1024 },
            "groups": {
              "type": "array",
              "description": "Notification groups or individual notifications, newest first. Clients should ignore kinds they do not recognize. Grouping behavior depends on the kind and selected feed.",
              "items": {
                "type": "ref",
                "ref": "#group"
              }
            },
            "seenAt": { "type": "string", "format": "datetime" },
            "relatedViews": {
              "type": "array",
              "description": "Reusable views referenced by notifications. Views shared across notifications appear once to avoid duplication. Each group contributes only its first 10 of each related view to this array. Ex: for a group containing likes in a post, we might have a large number of likeItem (e.g., 50) in a group, but only the profile views for the newest 10 items will be included here.",
              "items": {
                "type": "union",
                "refs": [
                  "app.bsky.actor.defs#profileViewDetailed",
                  "app.bsky.feed.defs#blockedPost",
                  "app.bsky.feed.defs#generatorView",
                  "app.bsky.feed.defs#notFoundPost",
                  "app.bsky.feed.defs#postView",
                  "app.bsky.graph.defs#starterPackView"
                ]
              }
            }
          }
        }
      }
    },
    "group": {
      "type": "object",
      "description": "Contains common metadata and kind-specific data for a notification group or individual notification.",
      "required": ["id", "isRead", "indexedAt", "count", "kind"],
      "properties": {
        "id": { "type": "string", "maxLength": 256 },
        "isRead": { "type": "boolean" },
        "indexedAt": { "type": "string", "format": "datetime" },
        "count": { "type": "integer", "minimum": 1 },
        "kind": {
          "type": "union",
          "refs": [
            "#likeGroup",
            "#multiPostLikeGroup",
            "#repostGroup",
            "#likeViaRepostGroup",
            "#repostViaRepostGroup",
            "#followGroup",
            "#subscribedPostGroup",
            "#generatorLikeGroup",
            "#replyNotification",
            "#quoteNotification",
            "#mentionNotification",
            "#followBackNotification",
            "#verifiedNotification",
            "#unverifiedNotification",
            "#starterPackJoinedNotification",
            "#contactMatchNotification"
          ]
        }
      }
    },
    "likeGroup": {
      "type": "object",
      "description": "Group of likes by different actors on the same post.",
      "required": ["post", "items"],
      "properties": {
        "post": { "type": "string", "format": "at-uri" },
        "items": {
          "type": "array",
          "minLength": 1,
          "items": {
            "type": "ref",
            "ref": "#likeItem"
          }
        }
      }
    },
    "likeItem": {
      "type": "object",
      "description": "One actor who liked the group's post.",
      "required": ["actor"],
      "properties": {
        "actor": { "type": "string", "format": "did" }
      }
    },
    "multiPostLikeGroup": {
      "type": "object",
      "description": "Group of likes by the same actor on different posts.",
      "required": ["actor", "items"],
      "properties": {
        "actor": { "type": "string", "format": "did" },
        "items": {
          "type": "array",
          "minLength": 2,
          "items": { "type": "ref", "ref": "#multiPostLikeItem" }
        }
      }
    },
    "multiPostLikeItem": {
      "type": "object",
      "description": "One post which was liked by the group's actor.",
      "required": ["post"],
      "properties": {
        "post": { "type": "string", "format": "at-uri" }
      }
    },
    "repostGroup": {
      "type": "object",
      "description": "Group of reposts by different actors of the same post.",
      "required": ["post", "items"],
      "properties": {
        "post": { "type": "string", "format": "at-uri" },
        "items": {
          "type": "array",
          "minLength": 1,
          "items": { "type": "ref", "ref": "#repostItem" }
        }
      }
    },
    "repostItem": {
      "type": "object",
      "description": "One actor who reposted the group's post.",
      "required": ["actor"],
      "properties": {
        "actor": { "type": "string", "format": "did" }
      }
    },
    "likeViaRepostGroup": {
      "type": "object",
      "description": "Group of likes by different actors on the same post via the requesting account's repost.",
      "required": ["post", "viaRepost", "items"],
      "properties": {
        "post": { "type": "string", "format": "at-uri" },
        "viaRepost": { "type": "string", "format": "at-uri" },
        "items": {
          "type": "array",
          "minLength": 1,
          "items": { "type": "ref", "ref": "#likeViaRepostItem" }
        }
      }
    },
    "likeViaRepostItem": {
      "type": "object",
      "description": "One actor who liked the group's post via the requesting account's repost.",
      "required": ["actor"],
      "properties": {
        "actor": { "type": "string", "format": "did" }
      }
    },
    "repostViaRepostGroup": {
      "type": "object",
      "description": "Group of reposts by different actors of the same post via the requesting account's repost.",
      "required": ["post", "viaRepost", "items"],
      "properties": {
        "post": { "type": "string", "format": "at-uri" },
        "viaRepost": { "type": "string", "format": "at-uri" },
        "items": {
          "type": "array",
          "minLength": 1,
          "items": { "type": "ref", "ref": "#repostViaRepostItem" }
        }
      }
    },
    "repostViaRepostItem": {
      "type": "object",
      "description": "One actor who reposted the group's post via the requesting account's repost.",
      "required": ["actor"],
      "properties": {
        "actor": { "type": "string", "format": "did" }
      }
    },
    "followGroup": {
      "type": "object",
      "description": "Group of actors who followed the requesting account.",
      "required": ["items"],
      "properties": {
        "items": {
          "type": "array",
          "minLength": 1,
          "items": { "type": "ref", "ref": "#followItem" }
        }
      }
    },
    "followItem": {
      "type": "object",
      "description": "An actor who followed the requesting account, possibly via a starter pack.",
      "required": ["actor"],
      "properties": {
        "actor": { "type": "string", "format": "did" },
        "starterPack": {
          "type": "string",
          "format": "at-uri"
        }
      }
    },
    "subscribedPostGroup": {
      "type": "object",
      "description": "Group of new posts by actors the requesting account subscribes to.",
      "required": ["items"],
      "properties": {
        "items": {
          "type": "array",
          "minLength": 1,
          "items": { "type": "ref", "ref": "#subscribedPostItem" }
        }
      }
    },
    "subscribedPostItem": {
      "type": "object",
      "description": "One new post by an actor the requesting account subscribes to.",
      "required": ["actor", "post"],
      "properties": {
        "actor": { "type": "string", "format": "did" },
        "post": { "type": "string", "format": "at-uri" }
      }
    },
    "generatorLikeGroup": {
      "type": "object",
      "description": "Group of likes by different actors on the same feed generator.",
      "required": ["generator", "items"],
      "properties": {
        "generator": { "type": "string", "format": "at-uri" },
        "items": {
          "type": "array",
          "minLength": 1,
          "items": { "type": "ref", "ref": "#generatorLikeItem" }
        }
      }
    },
    "generatorLikeItem": {
      "type": "object",
      "description": "One actor who liked the feed generator in the group.",
      "required": ["actor"],
      "properties": {
        "actor": { "type": "string", "format": "did" }
      }
    },
    "replyNotification": {
      "type": "object",
      "description": "A reply to a post by the requesting account or to a thread they are participating in.",
      "required": ["post", "parent"],
      "properties": {
        "post": { "type": "string", "format": "at-uri" },
        "parent": {
          "type": "string",
          "format": "at-uri"
        }
      }
    },
    "quoteNotification": {
      "type": "object",
      "description": "A post quoting a post by the requesting account.",
      "required": ["post"],
      "properties": {
        "post": { "type": "string", "format": "at-uri" },
        "parent": {
          "type": "string",
          "format": "at-uri"
        }
      }
    },
    "mentionNotification": {
      "type": "object",
      "description": "A post mentioning the requesting account.",
      "required": ["post"],
      "properties": {
        "post": { "type": "string", "format": "at-uri" },
        "parent": {
          "type": "string",
          "format": "at-uri"
        }
      }
    },
    "followBackNotification": {
      "type": "object",
      "description": "An actor followed the requesting account back, possibly via a starter pack.",
      "required": ["actor"],
      "properties": {
        "actor": { "type": "string", "format": "did" },
        "starterPack": { "type": "string", "format": "at-uri" }
      }
    },
    "verifiedNotification": {
      "type": "object",
      "description": "An actor verified the requesting account.",
      "required": ["actor"],
      "properties": {
        "actor": { "type": "string", "format": "did" }
      }
    },
    "unverifiedNotification": {
      "type": "object",
      "description": "A verification of the requesting account was removed.",
      "required": ["actor"],
      "properties": {
        "actor": { "type": "string", "format": "did" }
      }
    },
    "starterPackJoinedNotification": {
      "type": "object",
      "description": "An actor joined Bluesky via a starter pack created by the requesting account.",
      "required": ["actor", "starterPack"],
      "properties": {
        "actor": { "type": "string", "format": "did" },
        "starterPack": {
          "type": "string",
          "format": "at-uri"
        }
      }
    },
    "contactMatchNotification": {
      "type": "object",
      "description": "A contact of the requesting account joined Bluesky.",
      "required": ["actor"],
      "properties": {
        "actor": { "type": "string", "format": "did" }
      }
    }
  }
}

