{
  "lexicon": 1,
  "id": "chat.bsky.convo.addReaction",
  "defs": {
    "main": {
      "type": "procedure",
      "description": "Adds an emoji reaction to a message. Requires authentication. It is idempotent, so multiple calls from the same user with the same emoji result in a single reaction.",
      "input": {
        "encoding": "application/json",
        "schema": {
          "type": "object",
          "required": ["convoId", "messageId", "value"],
          "properties": {
            "convoId": { "type": "string" },
            "messageId": { "type": "string" },
            "value": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64,
              "minGraphemes": 1,
              "maxGraphemes": 1
            }
          }
        }
      },
      "output": {
        "encoding": "application/json",
        "schema": {
          "type": "object",
          "required": ["message"],
          "properties": {
            "message": {
              "type": "ref",
              "ref": "chat.bsky.convo.defs#messageView"
            }
          }
        }
      },
      "errors": [
        { "name": "InvalidConvo" },
        {
          "name": "ReactionNotAllowed",
          "description": "Indicates that reactions are not allowed on this message, e.g. because it is a system message."
        },
        {
          "name": "ReactionMessageDeleted",
          "description": "Indicates that the message has been deleted and reactions can no longer be added/removed."
        },
        {
          "name": "ReactionLimitReached",
          "description": "Indicates that the message has the maximum number of reactions allowed for a single user, and the requested reaction wasn't yet present. If it was already present, the request will not fail since it is idempotent."
        },
        {
          "name": "ReactionInvalidValue",
          "description": "Indicates the value for the reaction is not acceptable. In general, this means it is not an emoji."
        }
      ]
    }
  }
}

