PostObject:
  description: A single post in the array returned from `Posts.getPostSummaryByPids`
  type: object
  properties:
    pid:
      type: number
    tid:
      type: number
      description: A topic identifier
    toPid:
      type: number
      description: The post that this post is in reply to
      nullable: true
    url:
      type: string
      description: |
        A permalink to the post content.
        For posts received via ActivityPub, it is the url of the original piece of content.
    content:
      type: string
    sourceContent:
      type: string
      nullable: true
    uid:
      type: number
      description: A user identifier
    timestamp:
      type: number
    deleted:
      type: boolean
    upvotes:
      type: number
    downvotes:
      type: number
    votes:
      type: number
    timestampISO:
      type: string
      description: An ISO 8601 formatted date string (complementing `timestamp`)
    user:
      type: object
      properties:
        uid:
          type: number
          description: A user identifier
        isLocal:
          type: boolean
          description: Whether the user belongs to the local installation or not.
        username:
          type: string
          description: A friendly name for a given user account
        displayname:
          type: string
          description: This is either username or fullname depending on forum and user settings
        userslug:
          type: string
          description: An URL-safe variant of the username (i.e. lower-cased, spaces
            removed, etc.)
        picture:
          type: string
          nullable: true
        status:
          type: string
        icon:text:
          type: string
          description: A single-letter representation of a username. This is used in the
            auto-generated icon given to users without
            an avatar
        icon:bgColor:
          type: string
          description: A six-character hexadecimal colour code assigned to the user. This
            value is used in conjunction with
            `icon:text` for the user's auto-generated
            icon
          example: "#f44336"
    topic:
      type: object
      properties:
        uid:
          type: number
          description: A user identifier
        tid:
          type: number
          description: A topic identifier
        title:
          type: string
        cid:
          type: number
          description: A category identifier
        slug:
          type: string
        deleted:
          type: number
        scheduled:
          type: number
        timestamp:
          type: number
        timestampISO:
          type: string
          description: An ISO 8601 formatted date string (complementing `timestamp`)
        postcount:
          type: number
        mainPid:
          type: number
          description: The post id of the first post in this topic (also called the
            "original post")
        teaserPid:
          type: number
          description: The post id of the teaser (the most recent post, depending on settings)
          nullable: true
        titleRaw:
          type: string
        oldTitle:
          type: string
        isMainPost:
          type: boolean
        renamed:
          type: boolean
        tags:
          type: array
          items:
            $ref: ../../components/schemas/TagObject.yaml#/TagObject
      required:
        - uid
        - tid
        - cid
        - title
        - slug
    category:
      type: object
      properties:
        cid:
          type: number
          description: A category identifier
        name:
          type: string
        icon:
          type: string
        slug:
          type: string
        parentCid:
          type: number
          description: The category identifier for the category that is the immediate
            ancestor of the current category
        bgColor:
          type: string
        color:
          type: string
        backgroundImage:
          nullable: true
        imageClass:
          nullable: true
          type: string
    isMainPost:
      type: boolean
    replies:
      type: number
PostDataObject:
  description: The output as returned from `Posts.getPostsData`
  allOf:
    - type: object
      properties:
        pid:
          type: number
        uid:
          type: number
          description: A user identifier
        tid:
          type: number
          description: A topic identifier
        content:
          type: string
        timestamp:
          type: number
        votes:
          type: number
        deleted:
          type: number
        upvotes:
          type: number
        downvotes:
          type: number
        announces:
          type: number
        bookmarks:
          type: number
        deleterUid:
          type: number
        edited:
          type: number
        timestampISO:
          type: string
          description: An ISO 8601 formatted date string (complementing `timestamp`)
        editedISO:
          type: string
        index:
          type: number
        user:
          type: object
          properties:
            uid:
              type: number
              description: A user identifier
            isLocal:
              type: boolean
              description: Whether the user belongs to the local installation or not.
            username:
              type: string
              description: A friendly name for a given user account
            displayname:
              type: string
              description: This is either username or fullname depending on forum and user settings
            userslug:
              type: string
              description: An URL-safe variant of the username (i.e. lower-cased, spaces
                removed, etc.)
            reputation:
              type: number
            postcount:
              type: number
            topiccount:
              type: number
            picture:
              type: string
              nullable: true
            signature:
              type: string
            banned:
              type: number
            banned:expire:
              type: number
            status:
              type: string
            lastonline:
              type: number
            groupTitle:
              nullable: true
              type: string
            groupTitleArray:
              type: array
              items:
                type: string
            muted:
              type: boolean
              description: Whether or not the user has been muted.
            mutedUntil:
              type: number
              description: A UNIX timestamp representing the moment a muted state will be lifted.
              nullable: true
            icon:text:
              type: string
              description: A single-letter representation of a username. This is used in the
                auto-generated icon given to users without
                an avatar
            icon:bgColor:
              type: string
              description: A six-character hexadecimal colour code assigned to the user. This
                value is used in conjunction with
                `icon:text` for the user's auto-generated
                icon
              example: "#f44336"
            lastonlineISO:
              type: string
            banned_until:
              type: number
            banned_until_readable:
              type: string
            selectedGroups:
              type: array
              items:
                type: object
                properties:
                  name:
                    type: string
                  slug:
                    type: string
                  labelColor:
                    type: string
                  textColor:
                    type: string
                  icon:
                    type: string
                  userTitle:
                    type: string
            custom_profile_info:
              type: array
              items:
                type: object
                properties:
                  content:
                    type: string
                    description: HTML that is injected into `topic.tpl` of themes that support custom profile info
        editor:
          nullable: true
        bookmarked:
          type: boolean
        upvoted:
          type: boolean
        downvoted:
          type: boolean
        attachments:
          type: array
        replies:
          type: object
          properties:
            hasMore:
              type: boolean
            users:
              type: array
              items:
                type: object
                properties:
                  username:
                    type: string
                    description: A friendly name for a given user account
                  userslug:
                    type: string
                    description: An URL-safe variant of the username (i.e. lower-cased, spaces
                      removed, etc.)
                  picture:
                    type: string
                  uid:
                    type: number
                    description: A user identifier
                  icon:text:
                    type: string
                    description: A single-letter representation of a username. This is used in the
                      auto-generated icon given to users without
                      an avatar
                  icon:bgColor:
                    type: string
                    description: A six-character hexadecimal colour code assigned to the user. This
                      value is used in conjunction with
                      `icon:text` for the user's auto-generated
                      icon
                    example: "#f44336"
                  administrator:
                    type: boolean
            text:
              type: string
            count:
              type: number
            hasSingleImmediateReply:
              type: boolean
        selfPost:
          type: boolean
        events:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
              id:
                type: number
              timestamp:
                type: number
              timestampISO:
                type: string
        topicOwnerPost:
          type: boolean
        display_edit_tools:
          type: boolean
        display_delete_tools:
          type: boolean
        display_moderator_tools:
          type: boolean
        display_move_tools:
          type: boolean
        display_post_menu:
          type: boolean
        flagId:
          type: number
          description: The flag identifier, if this particular post has been flagged before
    - type: object
      description: Optional properties that may or may not be present (except for `pid`, which is always present, and is only here as a hack to pass validation)
      properties:
        pid:
          type: number
          description: A post identifier
        sourceContent:
          type: string
          description: The markdown equivalent of a remote post content, as received (or fetched) from the remote site.
      required:
        - pid
