Vanilla Forums Users API

The Users API from Vanilla Forums — 16 operation(s) for users.

OpenAPI Specification

vanilla-forums-users-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  description: API access to your community.
  title: Vanilla Addons Users API
  version: '2.0'
servers:
- url: https://open.vanillaforums.com/api/v2
tags:
- name: Users
paths:
  /users:
    get:
      parameters:
      - $ref: '#/components/parameters/DateInserted'
      - $ref: '#/components/parameters/DateUpdated'
      - name: dateLastActive
        description: When the user was last active on the community.
        in: query
        schema:
          type: string
          format: date-filter
      - name: roleID
        description: Filter by the role ID of a user.
        in: query
        schema:
          type: integer
      - name: roleIDs
        description: Filter by one of multiple role IDs.
        in: query
        schema:
          type: array
          items:
            type: integer
      - name: isBanned
        description: Filter by the banned status of a user. Pass true to filter only banned users, and false to exclude banned users.
        in: query
        schema:
          type: boolean
      - name: rankIDs
        description: Filter by one of multiple rank IDs.
        in: query
        schema:
          type: array
          items:
            type: integer
      - name: userID
        description: Filter by a range or CSV of user IDs.
        in: query
        schema:
          $ref: '#/components/schemas/RangeExpression'
      - name: name
        description: Filter by the user's username.
        in: query
        schema:
          type: string
      - name: email
        description: Filter by the user's email address.
        in: query
        schema:
          type: string
      - name: query
        description: Filter by the user's email address or username.
        in: query
        schema:
          type: string
      - name: ipAddresses
        description: Filter by the user's associated IP addresses
        in: query
        schema:
          items:
            type: string
          type: array
      - $ref: '#/components/parameters/Page'
      - description: 'Desired number of items per page.

          '
        in: query
        name: limit
        schema:
          type: integer
          default: 30
          maximum: 500
          minimum: 1
      - description: 'Token used to fetch next page of results. Cannot be combined with page.

          Warning: May lead to duplicate results if not sorted by primary key.

          '
        in: query
        name: cursor
        schema:
          type: string
      - name: sort
        in: query
        description: Sort the results.
        schema:
          type: string
          enum:
          - dateInserted
          - dateLastActive
          - name
          - userID
          - points
          - countPosts
          - dateFollowed
          - -dateInserted
          - -dateLastActive
          - -name
          - -userID
          - -points
          - -countPosts
          - -dateFollowed
          - groups.dateInserted
          - -groups.dateInserted
      - name: fields
        description: 'Fields that will be included in the response.

          '
        in: query
        schema:
          items:
            type: string
          type: array
        style: form
      - name: groupID
        description: Filter users by group association
        in: query
        schema:
          type: integer
      - name: membershipStatus
        description: Filter users by group membership status. Depends on groupID.
        in: query
        schema:
          type: string
          enum:
          - member
          - leader
          - pending
          - invited
          - banned
      - $ref: '#/components/parameters/UserExpand'
      - $ref: '#/components/parameters/ProfileFieldFilters'
      - name: followed
        description: Filter by users that the current user is following.
        in: query
        schema:
          type: boolean
      - name: fields
        in: query
        style: form
        description: Only return fields with these keys from the output. Use dot notation for nested fields.
        schema:
          type: array
          items:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/User'
                type: array
          description: Success
      tags:
      - Users
      summary: List users.
      x-addon: dashboard
    post:
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
          description: Success
      tags:
      - Users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserPost'
        required: true
      summary: Add a user.
      x-addon: dashboard
  /users/by-names:
    get:
      parameters:
      - description: 'Filter for username. Supports full or partial matching with appended wildcard (e.g. User*).

          '
        in: query
        name: name
        required: true
        schema:
          minLength: 1
          type: string
      - description: 'Sort method for results.

          Must be one of: "countComments", "dateLastActive", "name", "mention".

          '
        in: query
        name: order
        schema:
          type: string
          default: name
          enum:
          - countComments
          - dateLastActive
          - name
          - mention
      - description: 'Enforce setting to limit results, similar to default settings.

          '
        in: query
        name: mentionSettings
        schema:
          type: string
          default: name
          enum:
          - global
          - filter-loose
          - filter-strict
      - description: 'Specified what we are filtering by category/group/discussion/escalation

          '
        in: query
        name: recordType
        schema:
          type: string
          enum:
          - category
          - group
          - discussion
          - escalation
      - description: 'Specify value of the recordType

          '
        in: query
        name: recordID
        schema:
          type: integer
      - description: 'Page number. See [Pagination](https://docs.vanillaforums.com/apiv2/#pagination).

          '
        in: query
        name: page
        schema:
          type: integer
          default: 1
          minimum: 1
      - description: 'Desired number of items per page.

          '
        in: query
        name: limit
        schema:
          type: integer
          default: 30
          maximum: 100
          minimum: 1
      - name: fields
        in: query
        style: form
        description: Only return fields with these keys from the output. Use dot notation for nested fields.
        schema:
          type: array
          items:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/UserFragment'
                type: array
          description: Success
      tags:
      - Users
      summary: Search for users by full or partial name matching.
      x-addon: dashboard
  /users/leaders:
    get:
      summary: Get user's leaderboard.
      tags:
      - Users
      parameters:
      - description: Leaderboard type ("reputation" => "Reputation points", "posts" => "Discussion/comment posts", "acceptedAnswers" => "Accepted Answers count").
        in: query
        name: leaderboardType
        required: true
        schema:
          type: string
          enum:
          - reputation
          - posts
          - acceptedAnswers
          default: reputation
      - description: Slot type ("d" = day, "w" = week, "m" = month, "y" = year, "a" = all).
        in: query
        name: slotType
        required: true
        schema:
          type: string
          enum:
          - d
          - w
          - m
          - y
          - a
          default: a
      - description: The numeric ID of a category to limit search results to.
        in: query
        name: categoryID
        required: false
        schema:
          type: integer
      - description: The maximum amount of records to be returned.
        in: query
        name: limit
        required: false
        schema:
          type: integer
      - description: Specify a range or CSV of included role IDs.
        in: query
        name: includedRoleIDs
        required: false
        schema:
          $ref: '#/components/schemas/RangeExpression'
      - description: Specify a range or CSV of excluded role IDs.
        in: query
        name: excludedRoleIDs
        required: false
        schema:
          $ref: '#/components/schemas/RangeExpression'
      - name: fields
        in: query
        style: form
        description: Only return fields with these keys from the output. Use dot notation for nested fields.
        schema:
          type: array
          items:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    slotType:
                      description: Slot type ("d" = day, "w" = week, "m" = month, "y" = year, "a" = all).
                      type: string
                      enum:
                      - d
                      - w
                      - m
                      - y
                      - a
                    timeSlot:
                      description: The starting date/time for the requested Slot type.
                      type: string
                      format: date-time
                    source:
                      description: The score's source (Total, Badges, etc.) for the requested Slot type.
                      type: string
                    userID:
                      description: ID of the user.
                      type: integer
                    points:
                      description: The total number of points the user has accumulated.
                      type: integer
                    name:
                      description: Name of the user.
                      minLength: 1
                      type: string
                    photo:
                      description: URL to the user photo.
                      minLength: 0
                      nullable: true
                      type: string
                  required:
                  - categoryID
                  - userID
          description: Success
      x-addon: dashboard
  /users/me:
    get:
      responses:
        '200':
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/UserFragment'
                - type: object
                  properties:
                    email:
                      description: The current user's email address.
                      type: string
                      format: email
                    ssoID:
                      description: The unique ID of the default SSO connection. This will be YOUR user ID.
                      type: string
                    isSsoUser:
                      description: Whether the user has an active SSO connection.
                      type: boolean
                    isAdmin:
                      description: Whether or not the user is a global admin.
                      type: boolean
                    isSysAdmin:
                      description: Whether or not the user is a system admin.
                      type: boolean
                    permissions:
                      description: Global permissions available to the current user.
                      type: array
                      items:
                        type: string
                    countUnreadNotifications:
                      description: Total number of unread notifications for the current user.
                      type: integer
                    countUnreadConversations:
                      description: Total number of unread conversations for the current user.
                      type: integer
                  required:
                  - isAdmin
                  - isSysAdmin
                  - permissions
          description: Success
      tags:
      - Users
      summary: Get information about the current user.
      x-addon: dashboard
      parameters:
      - name: fields
        in: query
        style: form
        description: Only return fields with these keys from the output. Use dot notation for nested fields.
        schema:
          type: array
          items:
            type: string
  /users/me-counts:
    get:
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  counts:
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          description: Menu counter name
                          type: string
                        count:
                          description: Counter value
                          type: integer
                    example:
                    - name: UnreadNotifications
                      count: 2
                    - name: Bookmarks
                      count: 3
                required:
                - counts
          description: Success
      tags:
      - Users
      summary: Get information about menu counts for current user.
      x-addon: dashboard
      parameters:
      - name: fields
        in: query
        style: form
        description: Only return fields with these keys from the output. Use dot notation for nested fields.
        schema:
          type: array
          items:
            type: string
  /users/register:
    post:
      responses:
        '201':
          content:
            application/json:
              schema:
                properties:
                  email:
                    description: Email address of the user.
                    minLength: 0
                    type: string
                  name:
                    description: Name of the user.
                    minLength: 1
                    type: string
                  userID:
                    description: ID of the user.
                    type: integer
                required:
                - userID
                - name
                - email
                type: object
          description: Success
      tags:
      - Users
      requestBody:
        content:
          application/json:
            schema:
              properties:
                discoveryText:
                  description: 'Why does the user wish to join? Only used when the registration is flagged as SPAM (response code: 202).'
                  type: string
                email:
                  description: An email address for this user.
                  minLength: 1
                  type: string
                name:
                  description: The username.
                  minLength: 1
                  type: string
                password:
                  description: A password for this user.
                  minLength: 1
                  type: string
              required:
              - email
              - name
              - password
              type: object
        required: true
      summary: Submit a new user registration.
      x-addon: dashboard
  /users/request-password:
    post:
      responses:
        '201':
          description: Success
      tags:
      - Users
      requestBody:
        content:
          application/json:
            schema:
              properties:
                email:
                  description: The email/username of the user.
                  minLength: 1
                  type: string
              required:
              - email
              type: object
        required: true
      x-addon: dashboard
  /users/{id}:
    delete:
      parameters:
      - description: The user ID.
        in: path
        name: id
        required: true
        schema:
          type: integer
      responses:
        '204':
          description: Success
      tags:
      - Users
      requestBody:
        content:
          application/json:
            schema:
              properties:
                deleteMethod:
                  type: string
                  default: delete
                  description: The deletion method / strategy.
                  enum:
                  - keep
                  - wipe
                  - delete
              type: object
        required: true
      summary: Delete a user.
      x-addon: dashboard
    get:
      parameters:
      - description: 'The user ID.

          '
        in: path
        name: id
        required: true
        schema:
          type: integer
      - description: 'Expand associated records using one or more valid field names. A value of "all" will expand all expandable fields.

          '
        in: query
        name: expand
        schema:
          items:
            enum:
            - rank
            - discoveryText
            - profileFields
            - reactionsReceived
            - moderationCounts
            - followed
            - all
            type: string
          type: array
        style: form
      - description: 'Authenticate using a JWT, [role/token](https://success.vanillaforums.com/kb/articles/436-api-role-tokens).

          '
        in: query
        name: role-token
        schema:
          type: string
      - name: fields
        in: query
        style: form
        description: Only return fields with these keys from the output. Use dot notation for nested fields.
        schema:
          type: array
          items:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
          description: Success
        '403':
          description: 'Forbidden, e.g. expired or invalid role token, role token used with another auth mechanism.

            '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicError'
        '404':
          $ref: '#/components/responses/NotFound'
      tags:
      - Users
      summary: Get a user.
      x-addon: dashboard
    patch:
      parameters:
      - description: The user ID.
        in: path
        name: id
        required: true
        schema:
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
          description: Success
      tags:
      - Users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserPatch'
        required: true
      summary: Update a user.
      x-addon: dashboard
  /users/{id}/ban:
    put:
      parameters:
      - description: The user ID.
        in: path
        name: id
        required: true
        schema:
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  banned:
                    description: The current banned value.
                    type: boolean
                required:
                - banned
                type: object
          description: Success
      tags:
      - Users
      requestBody:
        content:
          application/json:
            schema:
              properties:
                banned:
                  description: Pass true to ban or false to unban.
                  type: boolean
              required:
              - banned
              type: object
        required: true
      summary: Ban a user.
      x-addon: dashboard
  /users/{id}/confirm-email:
    post:
      parameters:
      - description: The user ID.
        in: path
        name: id
        required: true
        schema:
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  email:
                    minLength: 1
                    type: string
                  emailConfirmed:
                    type: boolean
                  userID:
                    type: integer
                required:
                - userID
                - email
                - emailConfirmed
                type: object
          description: Success
      tags:
      - Users
      requestBody:
        content:
          application/json:
            schema:
              properties:
                confirmationCode:
                  description: Email confirmation code
                  minLength: 1
                  type: string
              required:
              - confirmationCode
              type: object
        required: true
      summary: Confirm a users current email address by using a confirmation code
      x-addon: dashboard
  /users/{id}/edit:
    get:
      parameters:
      - description: 'The user ID.

          '
        in: path
        name: id
        required: true
        schema:
          type: integer
      - description: 'Expand associated records using one or more valid field names. A value of "all" will expand all expandable fields.

          '
        in: query
        name: expand
        schema:
          items:
            enum:
            - rank
            - all
            type: string
          type: array
        style: form
      - name: fields
        in: query
        style: form
        description: Only return fields with these keys from the output. Use dot notation for nested fields.
        schema:
          type: array
          items:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  bypassSpam:
                    description: Should submissions from this user bypass SPAM checks?
                    type: boolean
                  email:
                    description: Email address of the user.
                    minLength: 0
                    type: string
                  emailConfirmed:
                    description: Has the email address for this user been confirmed?
                    type: boolean
                  name:
                    description: Name of the user.
                    minLength: 1
                    type: string
                  photo:
                    description: Raw photo field value from the user record.
                    minLength: 0
                    nullable: true
                    type: string
                  userID:
                    description: ID of the user.
                    type: integer
                required:
                - userID
                - name
                - email
                - photo
                - emailConfirmed
                - bypassSpam
                type: object
          description: Success
      tags:
      - Users
      summary: Get a user for editing.
      x-addon: dashboard
  /users/{id}/follow:
    patch:
      summary: Follow or unfollow a user.
      tags:
      - Users
      parameters:
      - description: The user ID to follow/unfollow.
        in: path
        name: id
        required: true
        schema:
          type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserFollow'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserFollowingPreferences'
          description: Success
      x-addon: dashboard
    get:
      summary: Get a user's following preferences.
      tags:
      - Users
      parameters:
      - description: The user ID to get following preferences for.
        in: path
        name: id
        required: true
        schema:
          type: integer
      - name: fields
        in: query
        style: form
        description: Only return fields with these keys from the output. Use dot notation for nested fields.
        schema:
          type: array
          items:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserFollowingPreferences'
          description: Success
      x-addon: dashboard
  /users/{id}/hidden:
    put:
      parameters:
      - description: The user ID.
        in: path
        name: id
        required: true
        schema:
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  hidden:
                    description: Whether not the user is hidden from Online status.
                    type: boolean
                required:
                - hidden
                type: object
          description: Success
      tags:
      - Users
      requestBody:
        content:
          application/json:
            schema:
              properties:
                hidden:
                  description: Whether not the user should be hidden from Online status.
                  type: boolean
              required:
              - hidden
              type: object
        required: true
      summary: Adjust a user’s Online privacy.
      x-addon: dashboard
  /users/{id}/photo:
    delete:
      parameters:
      - description: 'The user ID.

          '
        in: path
        name: id
        required: true
        schema:
          type: integer
      - description: 'Expand associated records using one or more valid field names. A value of "all" will expand all expandable fields.

          '
        in: query
        name: expand
        schema:
          items:
            enum:
            - rank
            - all
            type: string
          type: array
        style: form
      responses:
        '204':
          description: Success
      tags:
      - Users
      summary: Delete a user photo.
      x-addon: dashboard
    post:
      parameters:
      - in: path
        name: id
        required: true
        schema:
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  photoUrl:
                    description: URL to the user photo.
                    minLength: 0
                    nullable: true
                    type: string
                required:
                - photoUrl
                type: object
          description: Success
      tags:
      - Users
      requestBody:
        content:
          multipart/form-data:
            schema:
              properties:
                photo:
                  type: string
                  format: binary
              required:
              - photo
              type: object
        required: true
      x-addon: dashboard
  /users/{id}/rank:
    x-addon: ranks
    put:
      summary: Update the rank of a user.
      tags:
      - Users
      parameters:
      - in: path
        name: id
        required: true
        schema:
          type: integer
      requestBody:
        content:
          application/json:
            schema:
              properties:
                rankID:
                  description: ID of the user rank.
                  nullable: true
                  type: integer
              required:
              - rankID
              type: object
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  rankID:
                    description: ID of the user rank.
                    nullable: true
                    type: integer
                required:
                - rankID
                type: object
          description: Success
      x-addon: dashboard
  /users/{id}/reacted:
    get:
      summary: Get a user's posts that have received a certain reaction.
      tags:
      - Users
      parameters:
      - description: The user ID.
        in: path
        name: id
        required: true
        schema:
          type: integer
      - description: The reaction to filter by.
        in: query
        name: reactionUrlcode
        required: true
        schema:
          type: string
      - description: expand parameters
        in: query
        name: expand
        schema:
          items:
            enum:
            - insertUser
            - updateUser
            - reactions
            - all
            - insertUser.ssoID
            - insertUser.roles
            - insertUser.profileFields
            - insertUser.extended
            - updateUser.ssoID
            - updateUser.roles
            - updateUser.profileFields
            - updateUser.extended
            type: string
          type: array
        style: form
      - name: fields
        in: query
        style: form
        description: Only return fields with these keys from the output. Use dot notation for nested fields.
        schema:
          type: array
          items:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ReactedRecord'
          description: Success
      x-addon: dashboard
components:
  schemas:
    User:
      properties:
        userID:
          description: ID of the user.
          type: integer
        name:
          description: Name of the user.
          minLength: 1
          type: string
        photoUrl:
          description: URL to the user photo.
          minLength: 0
          nullable: true
          type: string
        email:
          description: Email address of the user.
          minLength: 0
          type: string
        hashMethod:
          type: string
          description: Hashing mechanism used for this user's password.
        roles:
          items:
            $ref: '#/components/schemas/RoleFragment'
          type: array
        dateInserted:
          description: When the user was created.
          format: date-time
          type: string
        dateLastActive:
          description: Time the user was last active.
          format: date-time
          nullable: true
          type: string
        dateUpdated:
          description: When the user was last updated.
          format: date-time
          nullable: true
          type: string
        points:
          description: The total number of points the user has accumulated.
          type: integer
          default: 0
        emailConfirmed:
          description: Has the email address for the user been confirmed?
          type: boolean
        hidden:
          description: Is this user hiding their online status?
          type: boolean
        bypassSpam:
          description: Should submissions from this user bypass SPAM checks?
          type: boolean
        banned:
          description: Is the user banned?
          type: integer
        rank:
          x-addon: ranks
          properties:
            name:
              description: Name of the rank.
              minLength: 1
              type: string
            rankID:
              description: Rank ID.
              type: integer
            userTitle:
              description: Label that will display beside the user.
              minLength: 1
              type: string
          required:
          - rankID
          - name
          - userTitle
          type: object
        rankID:
          x-addon: ranks
          description: ID of the user rank.
          nullable: true
          type: integer
        showEmail:
          description: Is the email address visible to other users?
          type: boolean
        suggestAnswers:
          description: Should we 

# --- truncated at 32 KB (57 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/vanilla-forums/refs/heads/main/openapi/vanilla-forums-users-api-openapi.yml