---
openapi: 3.1.0
components:
  schemas:
    Access:
      type: object
      properties:
        permission:
          $ref: "#/components/schemas/Permission"
        targetAction:
          $ref: "#/components/schemas/TargetAction"
    AccessTokenRedemptionResponse:
      type: object
      properties:
        redeemed:
          type: boolean
    Address:
      type: object
      properties:
        country:
          type: string
        address:
          type: string
        city:
          type: string
        postalCode:
          type: string
    AgeCategory:
      type: string
      enum:
      - YOUTH
      - JUNIOR
      - SENIOR
    ApiAccessToken:
      type: object
      properties:
        token:
          type: string
        domain:
          $ref: "#/components/schemas/TokenDomain"
        domainId:
          type: string
        target:
          $ref: "#/components/schemas/Target"
        targetId:
          type: string
        metaData:
          $ref: "#/components/schemas/PublicMetadata"
    ApiRoleAccessToken:
      type: object
      properties:
        token:
          type: string
        email:
          type: string
        siteId:
          type: string
        metaData:
          type: string
        targetType:
          $ref: "#/components/schemas/TargetType1"
        targetId:
          type: string
        role:
          $ref: "#/components/schemas/Role"
        accesses:
          type: array
          items:
            $ref: "#/components/schemas/Access"
        fullAccess:
          type: boolean
        type:
          $ref: "#/components/schemas/RoleAccessTokenType"
    Attribute:
      type: string
      enum:
      - CAPTAIN
    BlockUserRequest:
      type: object
      required:
      - blockedUserId
      properties:
        blockedUserId:
          type: string
          pattern: \S
    ContentReport:
      type: object
      properties:
        id:
          $ref: "#/components/schemas/ObjectId"
        reporterId:
          type: string
        reporterEmail:
          type: string
        entityId:
          type: string
        entityType:
          $ref: "#/components/schemas/ReportableEntityType"
        reason:
          type: string
        description:
          type: string
        siteId:
          type: string
        status:
          $ref: "#/components/schemas/ReportStatus"
        createdAt:
          $ref: "#/components/schemas/Date"
        statusHistory:
          type: array
          items:
            $ref: "#/components/schemas/ContentReportStatusUpdate"
      required:
      - reporterId
      - entityId
      - entityType
      - reason
      - siteId
      - status
      - createdAt
    ContentReportStatusUpdate:
      type: object
      required:
      - status
      - updatedBy
      - updatedAt
      properties:
        status:
          $ref: "#/components/schemas/ReportStatus"
        notes:
          type: string
          maxLength: 2000
        updatedBy:
          type: string
        updatedAt:
          $ref: "#/components/schemas/Date"
    CreateUserRequest:
      type: object
      required:
      - emailAddress
      - firstName
      - lastName
      properties:
        emailAddress:
          type: string
          pattern: \S
        password:
          type: string
        firstName:
          type: string
          pattern: \S
        lastName:
          type: string
          pattern: \S
        affiliateId:
          type: string
        siteId:
          type: string
        kickbackGroup:
          $ref: "#/components/schemas/KickbackGroup"
        domain:
          type: string
        sendResetPasswordMail:
          type: boolean
        dateOfBirth:
          $ref: "#/components/schemas/Date"
        gender:
          $ref: "#/components/schemas/Gender"
        address:
          $ref: "#/components/schemas/Address"
        location:
          $ref: "#/components/schemas/GeoJson"
        agreeToThirdPartyMarketing:
          type: boolean
    Date:
      type: string
      format: date
      examples:
      - 2022-03-10
    FavoritePlatform:
      type: string
      enum:
      - PS
      - PA
    FavoriteType:
      type: string
      enum:
      - CLUB
      - COMPETITION
      - TEAM
      - PERSON
      - SITE_ITEM
      - USER
    Feature:
      type: object
      properties:
        limit:
          type: integer
          format: int32
        stock:
          type: integer
          format: int32
        targetId:
          type: string
        targetType:
          $ref: "#/components/schemas/TargetType"
        data:
          type: object
          additionalProperties:
            type: string
        name:
          type: string
      required:
      - name
    File:
      type: object
      required:
      - id
      - blobId
      - mimeType
      properties:
        id:
          type: string
        blobId:
          type: string
        mimeType:
          type: string
        width:
          type: integer
          format: int32
        height:
          type: integer
          format: int32
        size:
          type: integer
          format: int64
        fileName:
          type: string
        storageType:
          $ref: "#/components/schemas/StorageType"
        url:
          type: string
    FollowRequest:
      type: object
      properties:
        id:
          $ref: "#/components/schemas/ObjectId"
        requesterId:
          type: string
        targetUserId:
          type: string
        siteId:
          type: string
        status:
          $ref: "#/components/schemas/FollowRequestStatus"
        created:
          $ref: "#/components/schemas/Date"
        updated:
          $ref: "#/components/schemas/Date"
      required:
      - targetUserId
      - siteId
    FollowRequestStatus:
      type: string
      enum:
      - PENDING
      - APPROVED
      - DENIED
    FollowRequestWithProfile:
      type: object
      properties:
        id:
          $ref: "#/components/schemas/ObjectId"
        requesterId:
          type: string
        targetUserId:
          type: string
        siteId:
          type: string
        status:
          $ref: "#/components/schemas/FollowRequestStatus"
        created:
          $ref: "#/components/schemas/Date"
        updated:
          $ref: "#/components/schemas/Date"
        requesterProfile:
          $ref: "#/components/schemas/UserProfile"
      required:
      - targetUserId
      - siteId
    Gender:
      type: string
      enum:
      - MALE
      - FEMALE
      - OTHER
    Gender1:
      type: string
      enum:
      - MALE
      - FEMALE
      - MIXED
    GeoJson:
      type: object
      required:
      - type
      - coordinates
      properties:
        type:
          $ref: "#/components/schemas/GeoJsonType"
        coordinates:
          type: array
          items:
            type: number
            format: double
          minItems: 2
          maxItems: 2
    GeoJsonType:
      type: string
      enum:
      - Point
    HighlightClip:
      type: object
      required:
      - id
      properties:
        id:
          $ref: "#/components/schemas/ObjectId"
        name:
          type: string
        siteId:
          type: string
        broadcastId:
          type: string
        competitionId:
          type: string
        creatorUserId:
          type: string
        timestamp:
          $ref: "#/components/schemas/Date"
        created:
          $ref: "#/components/schemas/Date"
        homeTeam:
          $ref: "#/components/schemas/HighlightGroup"
        awayTeam:
          $ref: "#/components/schemas/HighlightGroup"
        playerLevel:
          $ref: "#/components/schemas/PlayerLevel"
        image:
          $ref: "#/components/schemas/File"
        views:
          type: integer
          format: int64
        likes:
          type: integer
          format: int64
        promo:
          type: boolean
        matchEvent:
          $ref: "#/components/schemas/HighlightMatchEvent"
        persons:
          type: array
          uniqueItems: true
          items:
            $ref: "#/components/schemas/HighlightPerson"
        description:
          type: string
        clip:
          $ref: "#/components/schemas/HighlightClipPayload"
        publishedAt:
          $ref: "#/components/schemas/Date"
    HighlightClipPayload:
      type: object
      properties:
        type:
          type: string
        start:
          type: integer
          format: int32
        length:
          type: integer
          format: int32
        video:
          $ref: "#/components/schemas/File"
    HighlightGroup:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        shortName:
          type: string
        logo:
          $ref: "#/components/schemas/File"
    HighlightMatchEvent:
      type: object
      properties:
        id:
          type: string
        eventType:
          $ref: "#/components/schemas/MatchEventType"
        teamType:
          $ref: "#/components/schemas/TeamType"
        updatedTimeStamp:
          $ref: "#/components/schemas/Date"
        minutes:
          type: integer
          format: int32
        seconds:
          type: integer
          format: int32
        period:
          type: integer
          format: int32
        actionPlayer:
          $ref: "#/components/schemas/Person"
        assistingPlayers:
          type: array
          items:
            $ref: "#/components/schemas/Person"
        homeGoals:
          type: integer
          format: int32
        awayGoals:
          type: integer
          format: int32
        points:
          type: integer
          format: int32
    HighlightPerson:
      type: object
      properties:
        id:
          type: string
        firstName:
          type: string
        lastName:
          type: string
    HighlightPost:
      type: object
      required:
      - id
      properties:
        id:
          $ref: "#/components/schemas/ObjectId"
        name:
          type: string
        siteId:
          type: string
        broadcastId:
          type: string
        competitionId:
          type: string
        creatorUserId:
          type: string
        hashTag:
          type: array
          uniqueItems: true
          items:
            type: string
        description:
          type: string
        timestamp:
          $ref: "#/components/schemas/Date"
        created:
          $ref: "#/components/schemas/Date"
        image:
          $ref: "#/components/schemas/File"
        views:
          type: integer
          format: int64
        likes:
          type: integer
          format: int64
        promo:
          type: boolean
        creatorProfilePrivacy:
          $ref: "#/components/schemas/Privacy"
        creatorScoreMultiplier:
          type: number
          format: double
        highlightClips:
          type: array
          items:
            $ref: "#/components/schemas/HighlightPostClipPayload"
        publishedAt:
          $ref: "#/components/schemas/Date"
    HighlightPostClipPayload:
      type: object
      properties:
        id:
          type: string
        clip:
          $ref: "#/components/schemas/HighlightClipPayload"
        broadcastId:
          type: string
        image:
          $ref: "#/components/schemas/File"
        name:
          type: string
        persons:
          type: array
          uniqueItems: true
          items:
            $ref: "#/components/schemas/HighlightPerson"
    KickbackGroup:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        externalId:
          type: string
        id:
          type: string
      required:
      - id
    LoginRequest:
      type: object
      required:
      - userName
      - password
      properties:
        userName:
          type: string
          pattern: \S
        password:
          type: string
          pattern: \S
        totp:
          type: string
        roleAccessToken:
          type: string
    LoginResponse:
      type: object
      required:
      - status
      properties:
        status:
          $ref: "#/components/schemas/LoginStatus"
        message:
          type: string
        errorCode:
          type: string
        reason:
          type: string
        siteIds:
          type: array
          items:
            type: string
        tokenType:
          type: string
        accessToken:
          type: string
        expiresInSeconds:
          type: integer
          format: int32
        jwt_token:
          type: string
          deprecated: true
    LoginStatus:
      type: string
      enum:
      - OK
      - ACCOUNT_INCOMPLETE
      - ERROR
      - WARNING
      - MULTIPLE_SITES
    MatchEventType:
      type: string
      enum:
      - GOAL
      - PENALTY
      - POINT
      - SUBSTITUTION
      - MATCH_STANDING
      - SHOT
      - POSSESSION
      - REBOUND
      - BLOCK
      - FACEOFF
      - SHOOTOUT
      - TURNOVER
    ObjectId:
      type: string
      format: ObjectId
      description: MongoDB ObjectId represented as a string.
    Permission:
      type: string
      enum:
      - READ
      - WRITE
    Person:
      type: object
      properties:
        id:
          type: string
        extId:
          type: string
        role:
          $ref: "#/components/schemas/Role1"
        firstName:
          type: string
        lastName:
          type: string
        num:
          type: integer
          format: int32
        position:
          $ref: "#/components/schemas/Position"
        attributes:
          type: array
          items:
            $ref: "#/components/schemas/Attribute"
    PersonUserRef:
      type: object
      properties:
        personId:
          type: string
        userId:
          type: string
    PlayerClaimSendOtpRequest:
      type: object
      required:
      - personId
      - position
      - jerseyNumber
      - phoneNumber
      properties:
        personId:
          type: string
          pattern: \S
        position:
          type: string
          pattern: \S
        jerseyNumber:
          type: string
          pattern: \S
        phoneNumber:
          type: string
          pattern: \S
    PlayerClaimValidateRequest:
      type: object
      required:
      - personId
      - position
      - jerseyNumber
      properties:
        personId:
          type: string
          pattern: \S
        position:
          type: string
          pattern: \S
        jerseyNumber:
          type: string
          pattern: \S
    PlayerClaimValidateResponse:
      type: object
      properties:
        matched:
          type: boolean
        clubId:
          type: string
    PlayerClaimVerifyRequest:
      type: object
      required:
      - personId
      - position
      - jerseyNumber
      - phoneNumber
      - code
      properties:
        personId:
          type: string
          pattern: \S
        position:
          type: string
          pattern: \S
        jerseyNumber:
          type: string
          pattern: \S
        phoneNumber:
          type: string
          pattern: \S
        code:
          type: string
          pattern: \S
    PlayerClaimVerifyResponse:
      type: object
      properties:
        verified:
          type: boolean
    PlayerLevel:
      type: object
      required:
      - name
      - gender
      - category
      properties:
        name:
          type: string
        extId:
          type: string
        maxAge:
          type: integer
          format: int32
        gender:
          $ref: "#/components/schemas/Gender1"
        category:
          $ref: "#/components/schemas/AgeCategory"
    Position:
      type: string
      enum:
      - GK
      - GK2
      - LD
      - RD
      - D
      - F
      - LW
      - CF
      - RW
      - M
      - MF
      - L
      - HEAD
      - ASSIST
      - LINE
      - STAFF
      - MISC
    Preference:
      type: object
      properties:
        key:
          type: string
        value:
          type: string
    Privacy:
      type: string
      enum:
      - PUBLIC
      - PRIVATE
    PublicMetadata:
      type: object
      properties:
        imageSrc:
          type: string
        description:
          type: string
        title:
          type: string
    PublicUserProfile:
      type: object
      properties:
        userId:
          type: string
        siteId:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        clubId:
          type: string
        playerLevel:
          type: string
        position:
          type: string
        jerseyNumber:
          type: string
        preferredHand:
          type: string
        preferredFoot:
          type: string
        bio:
          type: string
        image:
          $ref: "#/components/schemas/File"
        verified:
          type: boolean
        followerCount:
          type: integer
          format: int32
        followingCount:
          type: integer
          format: int32
    ReportContentRequest:
      type: object
      required:
      - entityId
      - entityType
      - reason
      properties:
        entityId:
          type: string
          pattern: \S
        entityType:
          $ref: "#/components/schemas/ReportableEntityType"
        reason:
          type: string
          pattern: \S
          maxLength: 200
        description:
          type: string
          maxLength: 2000
    ReportStatus:
      type: string
      enum:
      - NEW
      - IN_PROGRESS
      - RESOLVED
    ReportableEntityType:
      type: string
      enum:
      - COMMENT
      - USER
      - POST
      - HIGHLIGHT
      - PLAYLIST
    RequestedFeed:
      type: string
      enum:
      - HIGHLIGHT_SNEAK_PEEK
      - HIGHLIGHT_FOLLOWING
      - HIGHLIGHT_FOR_YOU
      - HIGHLIGHT_DISCOVER
      - USER
    Role:
      type: string
      enum:
      - Viewer
      - Admin
      - TeamAccount
      - System
      - SuperAdmin
      - DataProvider
      - Member
      - GraphicsProducer
    Role1:
      type: string
      enum:
      - PLAYER
      - COACH
      - REFEREE
    RoleAccessToken:
      type: object
      properties:
        id:
          $ref: "#/components/schemas/ObjectId"
        name:
          type: string
        token:
          type: string
        siteId:
          type: string
        type:
          $ref: "#/components/schemas/RoleAccessTokenType"
        validTo:
          $ref: "#/components/schemas/Date"
        usesRemaining:
          type: integer
          format: int32
        redemptions:
          type: integer
          format: int32
        metaData:
          type: object
          additionalProperties:
            type: string
        createdByUserId:
          type: string
        created:
          $ref: "#/components/schemas/Date"
        targetType:
          $ref: "#/components/schemas/TargetType1"
        targetId:
          type: string
        role:
          $ref: "#/components/schemas/Role"
        accesses:
          type: array
          items:
            $ref: "#/components/schemas/Access"
        fullAccess:
          type: boolean
      required:
      - siteId
      - type
      - validTo
      - targetType
      - role
    RoleAccessTokenType:
      type: string
      enum:
      - ANONYMOUS
      - PERMANENT
    SortOrder:
      type: string
      enum:
      - Ascending
      - Descending
    Status:
      type: string
      enum:
      - CANCELED
      - PAYMENT_FAILED
      - ACTIVE
      - ENDED
      - PENDING
    StorageType:
      type: string
      enum:
      - LAS_FILES
      - LPP
      - EXTERNAL
    Target:
      type: string
      enum:
      - COMP
      - BRO
      - SITE
    TargetAction:
      type: string
      enum:
      - PRO_COMMENTARY
      - PRO_FILM
      - PRO_GRAPHICS
      - PRO_BROADCAST
      - PS_CAMPAIGNS
      - PS_VIDEO_CAMPAIGNS
      - PS_ORGANISATIONS
      - PS_USERS
      - BO_BROADCASTS
      - BO_VENUES
      - BO_COMPETITIONS
      - BO_AUDIT_LOG
      - BO_GROUPS
      - BO_FEATURES
      - BO_CAMERAS
      - BO_USERS
      - BO_SITE
      - BO_PAYMENTS
    TargetType:
      type: string
      enum:
      - BROADCAST
      - COMPETITION
      - SITE
      - EXTERNAL
    TargetType1:
      type: string
      enum:
      - GROUP
      - COMPETITION
      - BROADCAST
      - SITE_ITEM
      - ORGANISATION
      - SITE_SPONSOR
      - SITE
      - AFFILIATE
      - PARTNER
      - VENUE
    TeamType:
      type: string
      enum:
      - HOME
      - AWAY
      - TEAM
      - ROSTER
    TokenDomain:
      type: string
      enum:
      - DOWNLOAD
      - ACTIVATE
      - REDEEM
    UUID:
      type: string
      format: uuid
      pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}"
    UpdateContentReportRequest:
      type: object
      properties:
        status:
          $ref: "#/components/schemas/ReportStatus"
        notes:
          type: string
          maxLength: 2000
    User:
      type: object
      properties:
        id:
          $ref: "#/components/schemas/ObjectId"
        keycloakId:
          $ref: "#/components/schemas/UUID"
        emailAddress:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        externalId:
          type: string
        siteId:
          type: string
        affiliateId:
          type: string
        roles:
          type: array
          uniqueItems: true
          items:
            $ref: "#/components/schemas/Role"
        termsAccepted:
          type: boolean
        locale:
          type: string
        preferences:
          type: array
          items:
            $ref: "#/components/schemas/Preference"
        products:
          type: array
          items:
            type: string
        kickbackGroup:
          $ref: "#/components/schemas/KickbackGroup"
        image:
          $ref: "#/components/schemas/File"
        created:
          $ref: "#/components/schemas/Date"
        updated:
          $ref: "#/components/schemas/Date"
        dateOfBirth:
          $ref: "#/components/schemas/Date"
        gender:
          $ref: "#/components/schemas/Gender"
        address:
          $ref: "#/components/schemas/Address"
        location:
          $ref: "#/components/schemas/GeoJson"
    UserAccess:
      type: object
      properties:
        id:
          $ref: "#/components/schemas/ObjectId"
        userId:
          type: string
        siteId:
          type: string
        productId:
          type: string
        features:
          type: array
          items:
            $ref: "#/components/schemas/Feature"
          minItems: 1
        extId:
          type: string
        status:
          $ref: "#/components/schemas/Status"
        validTo:
          $ref: "#/components/schemas/Date"
        validFrom:
          $ref: "#/components/schemas/Date"
        created:
          $ref: "#/components/schemas/Date"
        updated:
          $ref: "#/components/schemas/Date"
      required:
      - userId
      - siteId
      - features
      - status
      - validTo
    UserBlock:
      type: object
      properties:
        id:
          $ref: "#/components/schemas/ObjectId"
        blockerId:
          type: string
        blockedId:
          type: string
        siteId:
          type: string
        createdAt:
          $ref: "#/components/schemas/Date"
      required:
      - blockerId
      - blockedId
      - siteId
      - createdAt
    UserBlockWithProfile:
      type: object
      properties:
        id:
          $ref: "#/components/schemas/ObjectId"
        blockerId:
          type: string
        blockedId:
          type: string
        siteId:
          type: string
        createdAt:
          $ref: "#/components/schemas/Date"
        blockedUserProfile:
          $ref: "#/components/schemas/UserProfile"
      required:
      - blockerId
      - blockedId
      - siteId
      - createdAt
    UserFavorite:
      type: object
      properties:
        id:
          $ref: "#/components/schemas/ObjectId"
        image:
          $ref: "#/components/schemas/File"
        siteId:
          type: string
        userId:
          type: string
        platform:
          $ref: "#/components/schemas/FavoritePlatform"
        type:
          $ref: "#/components/schemas/FavoriteType"
      required:
      - siteId
    UserFavoriteUserWithProfile:
      type: object
      properties:
        id:
          $ref: "#/components/schemas/ObjectId"
        image:
          $ref: "#/components/schemas/File"
        siteId:
          type: string
        userId:
          type: string
        platform:
          $ref: "#/components/schemas/FavoritePlatform"
        followedUserId:
          type: string
        type:
          $ref: "#/components/schemas/FavoriteType"
        userProfile:
          $ref: "#/components/schemas/UserProfile"
        followedUserProfile:
          $ref: "#/components/schemas/UserProfile"
      required:
      - siteId
      - followedUserId
    UserFeedItem:
      type: object
      required:
      - type
      properties:
        type:
          $ref: "#/components/schemas/UserFeedItemType"
        score:
          type: number
          format: double
        publishedAt:
          $ref: "#/components/schemas/Date"
        reasons:
          type: array
          items:
            type: string
        clip:
          $ref: "#/components/schemas/HighlightClip"
        post:
          $ref: "#/components/schemas/HighlightPost"
        user:
          $ref: "#/components/schemas/UserProfileWithFollowCounts"
    UserFeedItemType:
      type: string
      enum:
      - CLIP
      - POST
      - USER
    UserFeedResponse:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: "#/components/schemas/UserFeedItem"
        cursor:
          type: string
        hasMore:
          type: boolean
    UserProfile:
      type: object
      properties:
        id:
          $ref: "#/components/schemas/ObjectId"
        userId:
          type: string
        siteId:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        personId:
          type: string
        clubId:
          type: string
        dateOfBirth:
          $ref: "#/components/schemas/Date"
        gender:
          $ref: "#/components/schemas/Gender"
        heightCm:
          type: number
          format: double
        weightKg:
          type: number
          format: double
        bio:
          type: string
        playerLevel:
          type: string
        preferredHand:
          type: string
        preferredFoot:
          type: string
        position:
          type: string
        jerseyNumber:
          type: string
        nationality:
          type: string
        image:
          $ref: "#/components/schemas/File"
        verified:
          type: boolean
        privacy:
          $ref: "#/components/schemas/Privacy"
        createdPostsScoreMultiplier:
          type: number
          format: double
        created:
          $ref: "#/components/schemas/Date"
        updated:
          $ref: "#/components/schemas/Date"
      required:
      - userId
      - siteId
    UserProfileWithEmail:
      type: object
      properties:
        id:
          $ref: "#/components/schemas/ObjectId"
        userId:
          type: string
        siteId:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        personId:
          type: string
        clubId:
          type: string
        dateOfBirth:
          $ref: "#/components/schemas/Date"
        gender:
          $ref: "#/components/schemas/Gender"
        heightCm:
          type: number
          format: double
        weightKg:
          type: number
          format: double
        bio:
          type: string
        playerLevel:
          type: string
        preferredHand:
          type: string
        preferredFoot:
          type: string
        position:
          type: string
        jerseyNumber:
          type: string
        nationality:
          type: string
        image:
          $ref: "#/components/schemas/File"
        verified:
          type: boolean
        privacy:
          $ref: "#/components/schemas/Privacy"
        createdPostsScoreMultiplier:
          type: number
          format: double
        created:
          $ref: "#/components/schemas/Date"
        updated:
          $ref: "#/components/schemas/Date"
        emailAddress:
          type: string
      required:
      - userId
      - siteId
    UserProfileWithFollowCounts:
      type: object
      properties:
        id:
          $ref: "#/components/schemas/ObjectId"
        userId:
          type: string
        siteId:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        personId:
          type: string
        clubId:
          type: string
        dateOfBirth:
          $ref: "#/components/schemas/Date"
        gender:
          $ref: "#/components/schemas/Gender"
        heightCm:
          type: number
          format: double
        weightKg:
          type: number
          format: double
        bio:
          type: string
        playerLevel:
          type: string
        preferredHand:
          type: string
        preferredFoot:
          type: string
        position:
          type: string
        jerseyNumber:
          type: string
        nationality:
          type: string
        image:
          $ref: "#/components/schemas/File"
        verified:
          type: boolean
        privacy:
          $ref: "#/components/schemas/Privacy"
        createdPostsScoreMultiplier:
          type: number
          format: double
        created:
          $ref: "#/components/schemas/Date"
        updated:
          $ref: "#/components/schemas/Date"
        followerCount:
          type: integer
          format: int32
        followingCount:
          type: integer
          format: int32
      required:
      - userId
      - siteId
    ViewerToken:
      type: object
      properties:
        token:
          type: string
        validTo:
          $ref: "#/components/schemas/Date"
    ViewerTokenRequest:
      type: object
      required:
      - siteId
      - userId
      properties:
        siteId:
          type: string
        userId:
          type: string
        email:
          type: string
        groupId:
          type: string
        venueId:
          type: string
        broadcastId:
          type: string
        competitionId:
          type: string
  securitySchemes:
    SecurityScheme:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Authentication
paths:
  /user:
    post:
      parameters:
      - name: User-Agent
        in: header
        schema:
          type: string
      - name: site-id
        in: header
        schema:
          type: string
          pattern: \S
        required: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateUserRequest"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
        "400":
          description: Bad Request
      summary: Create User
      tags:
      - User Resource
  /user/access:
    get:
      parameters:
      - name: ext-id
        in: query
        schema:
          type: string
      - name: feature-type
        in: query
        schema:
          type: string
      - name: from
        in: query
        schema:
          $ref: "#/components/schemas/Date"
      - name: page-index
        in: query
        schema:
          type: integer
          format: int32
      - name: page-size
        in: query
        schema:
          type: integer
          format: int32
      - name: product-id
        in: query
        schema:
          type: array
          items:
            type: string
      - name: site-id
        in: query
        schema:
          type: string
      - name: sort-column
        in: query
        schema:
          type: string
      - name: sort-order
        in: query
        schema:
          $ref: "#/components/schemas/SortOrder"
      - name: status
        in: query
        schema:
          type: array
          items:
            $ref: "#/components/schemas/Status"
      - name: target-id
        in: query
        schema:
          type: string
      - name: target-type
        in: query
        schema:
          $ref: "#/components/schemas/TargetType"
      - name: to
        in: query
        schema:
          $ref: "#/components/schemas/Date"
      - name: user-id
        in: query
        schema:
          type: string
      - name: valid-from
        in: query
        schema:
          $ref: "#/components/schemas/Date"
      - name: valid-to
        in: query
        schema:
          $ref: "#/components/schemas/Date"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/UserAccess"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Get User Access
      tags:
      - User Access Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/access-token/meta-data:
    get:
      parameters:
      - name: token
        in: query
        schema:
          type: string
      - name: site-id
        in: header
        schema:
          type: string
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiAccessToken"
      summary: Get Activate User Meta Data
      tags:
      - Access Token Resource
  /user/access-token/redeem:
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ApiAccessToken"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AccessTokenRedemptionResponse"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
        "400":
          description: Bad Request
      summary: Redeem Access Token
      tags:
      - Access Token Resource
      security:
      - SecurityScheme:
        - SuperAdmin
        - Admin
        - Viewer
  /user/access/valid:
    get:
      parameters:
      - name: user-id
        in: query
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/UserAccess"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Get User Access
      tags:
      - User Access Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/activate:
    post:
      parameters:
      - name: token
        in: query
        schema:
          type: array
          items:
            type: string
      - name: User-Agent
        in: header
        schema:
          type: string
      - name: site-id
        in: header
        schema:
          type: string
          pattern: \S
        required: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateUserRequest"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LoginResponse"
        "400":
          description: Bad Request
      summary: Activate User
      tags:
      - Activate User Resource
  /user/blocks:
    get:
      parameters:
      - name: id
        in: query
        schema:
          type: array
          items:
            $ref: "#/components/schemas/ObjectId"
      - name: page-index
        in: query
        schema:
          type: integer
          format: int32
          minimum: 0
      - name: page-size
        in: query
        schema:
          type: integer
          format: int32
          minimum: 0
      - name: sort-column
        in: query
        schema:
          type: string
      - name: sort-order
        in: query
        schema:
          $ref: "#/components/schemas/SortOrder"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/UserBlockWithProfile"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: List Blocks
      tags:
      - User Block Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/BlockUserRequest"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserBlock"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
        "400":
          description: Bad Request
      summary: Block User
      tags:
      - User Block Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/blocks/{blockedUserId}:
    delete:
      parameters:
      - name: blockedUserId
        in: path
        required: true
        schema:
          type: string
      responses:
        "204":
          description: No Content
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Unblock User
      tags:
      - User Block Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/favorite:
    patch:
      requestBody:
        content:
          application/json:
            schema:
              type: string
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserFavorite"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Patch User Favorite
      tags:
      - User Favorite Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
    get:
      parameters:
      - name: followed-user-id
        in: query
        schema:
          type: string
      - name: group-id
        in: query
        schema:
          type: string
      - name: page-index
        in: query
        schema:
          type: integer
          format: int32
      - name: page-size
        in: query
        schema:
          type: integer
          format: int32
      - name: platform
        in: query
        schema:
          type: array
          items:
            $ref: "#/components/schemas/FavoritePlatform"
      - name: site-id
        in: query
        schema:
          type: string
      - name: sort-column
        in: query
        schema:
          type: string
      - name: sort-order
        in: query
        schema:
          $ref: "#/components/schemas/SortOrder"
      - name: type
        in: query
        schema:
          type: array
          items:
            $ref: "#/components/schemas/FavoriteType"
      - name: user-id
        in: query
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/UserFavorite"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Get User Favorites
      tags:
      - User Favorite Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UserFavorite"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserFavorite"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
        "400":
          description: Bad Request
      summary: Create User Favorite
      tags:
      - User Favorite Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/favorite/follower/{followerUserId}:
    delete:
      parameters:
      - name: followerUserId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: boolean
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Remove Follower
      tags:
      - User Favorite Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/favorite/user:
    get:
      parameters:
      - name: followed-user-id
        in: query
        schema:
          type: string
      - name: group-id
        in: query
        schema:
          type: string
      - name: page-index
        in: query
        schema:
          type: integer
          format: int32
      - name: page-size
        in: query
        schema:
          type: integer
          format: int32
      - name: platform
        in: query
        schema:
          type: array
          items:
            $ref: "#/components/schemas/FavoritePlatform"
      - name: site-id
        in: query
        schema:
          type: string
      - name: sort-column
        in: query
        schema:
          type: string
      - name: sort-order
        in: query
        schema:
          $ref: "#/components/schemas/SortOrder"
      - name: type
        in: query
        schema:
          type: array
          items:
            $ref: "#/components/schemas/FavoriteType"
      - name: user-id
        in: query
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/UserFavoriteUserWithProfile"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Get User Favorite Users
      tags:
      - User Favorite User Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/favorite/{userFavoriteId}:
    get:
      parameters:
      - name: userFavoriteId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserFavorite"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Get User Favorite
      tags:
      - User Favorite Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
    delete:
      parameters:
      - name: userFavoriteId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: boolean
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Delete User Favorite
      tags:
      - User Favorite Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/feed/sneak-peek:
    get:
      parameters:
      - name: cursor
        in: query
        schema:
          type: string
      - name: feed
        in: query
        schema:
          $ref: "#/components/schemas/RequestedFeed"
      - name: hash-tag
        in: query
        schema:
          type: string
      - name: page-size
        in: query
        schema:
          type: integer
          format: int32
      - name: platform
        in: query
        schema:
          type: array
          items:
            $ref: "#/components/schemas/FavoritePlatform"
      - name: site-id
        in: header
        schema:
          type: string
          pattern: \S
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserFeedResponse"
      summary: Get Sneak Peek Feed
      tags:
      - User Feed Resource
  /user/follow-request:
    get:
      parameters:
      - name: id
        in: query
        schema:
          type: array
          items:
            $ref: "#/components/schemas/ObjectId"
      - name: page-index
        in: query
        schema:
          type: integer
          format: int32
          minimum: 0
      - name: page-size
        in: query
        schema:
          type: integer
          format: int32
          minimum: 0
      - name: requester-id
        in: query
        schema:
          type: string
      - name: site-id
        in: query
        schema:
          type: string
      - name: sort-column
        in: query
        schema:
          type: string
      - name: sort-order
        in: query
        schema:
          $ref: "#/components/schemas/SortOrder"
      - name: status
        in: query
        schema:
          $ref: "#/components/schemas/FollowRequestStatus"
      - name: target-user-id
        in: query
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/FollowRequestWithProfile"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Get Follow Requests
      tags:
      - Follow Request Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/FollowRequest"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FollowRequest"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
        "400":
          description: Bad Request
      summary: Create Follow Request
      tags:
      - Follow Request Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/follow-request/count:
    get:
      parameters:
      - name: site-id
        in: query
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: integer
                format: int64
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Count Pending Requests
      tags:
      - Follow Request Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/follow-request/status:
    get:
      parameters:
      - name: requester-id
        in: query
        schema:
          type: string
      - name: site-id
        in: query
        schema:
          type: string
      - name: target-user-id
        in: query
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FollowRequest"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Get Follow Request Status
      tags:
      - Follow Request Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/follow-request/{followRequestId}:
    delete:
      parameters:
      - name: followRequestId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: boolean
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Cancel Follow Request
      tags:
      - Follow Request Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/follow-request/{followRequestId}/approve:
    post:
      parameters:
      - name: followRequestId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FollowRequest"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Approve Follow Request
      tags:
      - Follow Request Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/follow-request/{followRequestId}/deny:
    post:
      parameters:
      - name: followRequestId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FollowRequest"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Deny Follow Request
      tags:
      - Follow Request Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/login:
    post:
      parameters:
      - name: site-id
        in: header
        schema:
          type: string
          pattern: \S
        required: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LoginRequest"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LoginResponse"
        "400":
          description: Bad Request
      summary: Login
      tags:
      - User Resource
  /user/player-claim/send-otp:
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PlayerClaimSendOtpRequest"
        required: true
      responses:
        "201":
          description: Created
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
        "400":
          description: Bad Request
      summary: Send Otp
      tags:
      - Player Claim Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/player-claim/validate:
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PlayerClaimValidateRequest"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PlayerClaimValidateResponse"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
        "400":
          description: Bad Request
      summary: Validate
      tags:
      - Player Claim Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/player-claim/verify:
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PlayerClaimVerifyRequest"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PlayerClaimVerifyResponse"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
        "400":
          description: Bad Request
      summary: Verify
      tags:
      - Player Claim Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/profile:
    get:
      parameters:
      - name: club-id
        in: query
        schema:
          type: array
          items:
            type: string
      - name: id
        in: query
        schema:
          type: array
          items:
            $ref: "#/components/schemas/ObjectId"
      - name: page-index
        in: query
        schema:
          type: integer
          format: int32
          minimum: 0
      - name: page-size
        in: query
        schema:
          type: integer
          format: int32
          minimum: 0
      - name: person-id
        in: query
        schema:
          type: string
      - name: player-level
        in: query
        schema:
          type: string
      - name: search
        in: query
        schema:
          type: string
      - name: site-id
        in: query
        schema:
          type: string
      - name: sort-column
        in: query
        schema:
          type: string
      - name: sort-order
        in: query
        schema:
          $ref: "#/components/schemas/SortOrder"
      - name: user-id
        in: query
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/UserProfileWithFollowCounts"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Get User Profiles
      tags:
      - User Profile Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UserProfile"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserProfile"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
        "400":
          description: Bad Request
      summary: Create User Profile
      tags:
      - User Profile Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/profile/admin:
    get:
      parameters:
      - name: id
        in: query
        schema:
          type: array
          items:
            $ref: "#/components/schemas/ObjectId"
      - name: page-index
        in: query
        schema:
          type: integer
          format: int32
          minimum: 0
      - name: page-size
        in: query
        schema:
          type: integer
          format: int32
          minimum: 0
      - name: search
        in: query
        schema:
          type: string
      - name: site-id
        in: query
        schema:
          type: string
          pattern: \S
        required: true
      - name: sort-column
        in: query
        schema:
          type: string
      - name: sort-order
        in: query
        schema:
          $ref: "#/components/schemas/SortOrder"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/UserProfileWithEmail"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Get Admin User Profiles
      tags:
      - User Profile Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
  /user/profile/person-refs:
    get:
      parameters:
      - name: person-id
        in: query
        schema:
          type: array
          items:
            type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/PersonUserRef"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Get Person User Refs
      tags:
      - User Profile Resource
      security:
      - SecurityScheme:
        - System
  /user/profile/public:
    get:
      parameters:
      - name: club-id
        in: query
        schema:
          type: array
          items:
            type: string
      - name: id
        in: query
        schema:
          type: array
          items:
            $ref: "#/components/schemas/ObjectId"
      - name: page-index
        in: query
        schema:
          type: integer
          format: int32
          minimum: 0
      - name: page-size
        in: query
        schema:
          type: integer
          format: int32
          minimum: 0
      - name: person-id
        in: query
        schema:
          type: string
      - name: player-level
        in: query
        schema:
          type: string
      - name: search
        in: query
        schema:
          type: string
      - name: site-id
        in: query
        schema:
          type: string
      - name: sort-column
        in: query
        schema:
          type: string
      - name: sort-order
        in: query
        schema:
          $ref: "#/components/schemas/SortOrder"
      - name: user-id
        in: query
        schema:
          type: string
      - name: site-id
        in: header
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/PublicUserProfile"
      summary: Get Public User Profiles
      tags:
      - User Profile Resource
  /user/profile/suggested:
    get:
      parameters:
      - name: club-id
        in: query
        schema:
          type: array
          items:
            type: string
      - name: exclude-user-id
        in: query
        schema:
          type: string
      - name: id
        in: query
        schema:
          type: array
          items:
            $ref: "#/components/schemas/ObjectId"
      - name: page-index
        in: query
        schema:
          type: integer
          format: int32
          minimum: 0
      - name: page-size
        in: query
        schema:
          type: integer
          format: int32
          minimum: 0
      - name: site-id
        in: query
        schema:
          type: string
      - name: sort-column
        in: query
        schema:
          type: string
      - name: sort-order
        in: query
        schema:
          $ref: "#/components/schemas/SortOrder"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/UserProfileWithFollowCounts"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Get Suggested Profiles
      tags:
      - User Profile Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/reports:
    get:
      parameters:
      - name: entity-id
        in: query
        schema:
          type: string
      - name: entity-type
        in: query
        schema:
          $ref: "#/components/schemas/ReportableEntityType"
      - name: id
        in: query
        schema:
          type: array
          items:
            $ref: "#/components/schemas/ObjectId"
      - name: page-index
        in: query
        schema:
          type: integer
          format: int32
          minimum: 0
      - name: page-size
        in: query
        schema:
          type: integer
          format: int32
          minimum: 0
      - name: reporter-id
        in: query
        schema:
          type: string
      - name: sort-column
        in: query
        schema:
          type: string
      - name: sort-order
        in: query
        schema:
          $ref: "#/components/schemas/SortOrder"
      - name: status
        in: query
        schema:
          $ref: "#/components/schemas/ReportStatus"
      - name: target-site-id
        in: query
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ContentReport"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Get Reports
      tags:
      - Content Report Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ReportContentRequest"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ContentReport"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
        "400":
          description: Bad Request
      summary: Create Report
      tags:
      - Content Report Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/reports/{reportId}:
    patch:
      parameters:
      - name: reportId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateContentReportRequest"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ContentReport"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Patch Report
      tags:
      - Content Report Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
    get:
      parameters:
      - name: reportId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ContentReport"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Get Report
      tags:
      - Content Report Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
  /user/role-access/token:
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RoleAccessToken"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RoleAccessToken"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
        "400":
          description: Bad Request
      summary: Create Role Access Token
      tags:
      - Role Access Token Resource
      security:
      - SecurityScheme:
        - SuperAdmin
        - Admin
        - Member
  /user/role-access/token/meta-data:
    get:
      parameters:
      - name: token
        in: query
        schema:
          type: string
      - name: site-id
        in: header
        schema:
          type: string
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiRoleAccessToken"
      summary: Get Token Meta Data
      tags:
      - Role Access Token Resource
  /user/role-access/token/redeem:
    post:
      parameters:
      - name: site-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ApiRoleAccessToken"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LoginResponse"
        "400":
          description: Bad Request
      summary: Redeem Role Access Token
      tags:
      - Role Access Token Resource
  /user/viewer-token:
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ViewerTokenRequest"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ViewerToken"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
        "400":
          description: Bad Request
      summary: Create Viewer Token
      tags:
      - User Resource
      security:
      - SecurityScheme:
        - SuperAdmin
        - Admin
  /user/{userId}/blocks/exclusions:
    get:
      parameters:
      - name: userId
        in: path
        required: true
        schema:
          type: string
      - name: site-id
        in: query
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Get Exclusions
      tags:
      - User Block Resource
      security:
      - SecurityScheme:
        - System
  /user/{userId}/feed:
    get:
      parameters:
      - name: userId
        in: path
        required: true
        schema:
          type: string
      - name: cursor
        in: query
        schema:
          type: string
      - name: feed
        in: query
        schema:
          $ref: "#/components/schemas/RequestedFeed"
      - name: hash-tag
        in: query
        schema:
          type: string
      - name: page-size
        in: query
        schema:
          type: integer
          format: int32
      - name: platform
        in: query
        schema:
          type: array
          items:
            $ref: "#/components/schemas/FavoritePlatform"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserFeedResponse"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Get User Feed
      tags:
      - User Feed Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
  /user/{userId}/profile:
    patch:
      parameters:
      - name: userId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: string
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserProfile"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Patch User Profile
      tags:
      - User Profile Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
    get:
      parameters:
      - name: userId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserProfileWithFollowCounts"
        "401":
          description: Not Authorized
        "403":
          description: Not Allowed
      summary: Get User Profile
      tags:
      - User Profile Resource
      security:
      - SecurityScheme:
        - System
        - SuperAdmin
        - Admin
        - Member
        - Viewer
info:
  title: User Service API
  version: 1.0-SNAPSHOT
