Vanilla Forums Discussions API
The Discussions API from Vanilla Forums — 28 operation(s) for discussions.
The Discussions API from Vanilla Forums — 28 operation(s) for discussions.
openapi: 3.0.3
info:
description: API access to your community.
title: Vanilla Addons Discussions API
version: '2.0'
servers:
- url: https://open.vanillaforums.com/api/v2
tags:
- name: Discussions
paths:
/comments/list:
delete:
requestBody:
content:
application/json:
schema:
type: object
description: An array of comment IDs.
properties:
commentIDs:
type: array
items:
type: integer
example:
- 2452
- 14253
- 14124
deleteMethod:
enum:
- full
- tombstone
type: string
responses:
'202':
$ref: '#/components/responses/TrackingSlipResponse'
'204':
description: Success
'403':
$ref: '#/components/responses/PermissionError'
'408':
$ref: '#/components/responses/LongRunnerResponse'
tags:
- Discussions
summary: Delete a list of comments.
x-addon: vanilla
/discussions:
get:
parameters:
- name: discussionID
description: Filter by a range or CSV of discussion IDs.
in: query
schema:
$ref: '#/components/schemas/RangeExpression'
- name: categoryID
description: Filter by a category.
in: query
schema:
type: integer
- $ref: '#/components/parameters/DateInserted'
- $ref: '#/components/parameters/DateUpdated'
- $ref: '#/components/parameters/DateLastComment'
- name: slotType
description: Filter to discussions created within a certain timeframe. Daily, Weekly, Monthly, Yearly, or all time.
in: query
schema:
type: string
enum:
- d
- w
- m
- y
- a
- name: siteSectionID
description: 'Filter discussions by site section ID (ex. subcommunity).
The subcommunity ID or folder can be used if you use [smart IDs](https://success.vanillaforums.com/kb/articles/46-smart-ids).
The query looks like:
```
siteSectionID=$subcommunityID:{id|folder}
```'
in: query
schema:
type: string
- name: tagID
description: Filter discussion by a range of tag IDs.
in: query
schema:
$ref: '#/components/schemas/RangeExpression'
- name: tagOperator
description: Either 'and' or 'or'. 'or' logic means a post only needs 1 of the provided tags. 'and' means it needs all of them.
in: query
schema:
type: string
enum:
- and
- or
default: or
- name: type
description: Filter by discussion type, or comma separated list.
in: query
schema:
type: string
x-filter:
field: d.Type
- name: postTypeID
description: Filter by one or more postTypeIDs.
in: query
schema:
type: string
- name: status
description: Filter questions by status (accepted, answered, unanswered).
in: query
schema:
type: string
x-filter:
field: d.QnA
- name: excludeHiddenCategories
description: Exclude discussions from categories that has the `HideAllDiscussions` option set to true.
in: query
required: false
schema:
default: false
type: boolean
- name: followed
description: 'Only fetch discussions from followed categories. Pinned discussions are mixed in.
'
in: query
required: false
schema:
default: false
type: boolean
- name: userFollowed
description: 'Only fetch discussions from users the current user is following. Requires authentication. Returns empty array for guest users or users who follow no one.
'
in: query
required: false
schema:
default: false
type: boolean
- name: score
description: Filter by score.
in: query
schema:
type: integer
- name: pinned
description: 'Whether or not to include pinned discussions. If true, only return pinned discussions. Cannot be used with the pinOrder parameter.
'
in: query
schema:
type: boolean
- name: pinOrder
description: 'If including pinned posts, in what order should they be integrated? When "first", discussions pinned to a specific category will only be affected if the discussion''s category is passed as the categoryID parameter. Cannot be used with the pinned parameter.
Must be one of: "first", "mixed".
'
in: query
schema:
type: string
default: first
enum:
- first
- mixed
- name: hasComments
description: Optionally only include discussions that have/doesn't have comments.
in: query
required: false
schema:
type: boolean
- $ref: '#/components/parameters/Page'
- name: limit
description: 'Desired number of items per page. **Note that you may not get the exact number of records back as specified with the limit unless you also specify pinOrder=mixed**. This is an optimization for pinned (i.e. announcement) discussion handling.
'
in: query
schema:
type: integer
default: 30
maximum: 100
minimum: 1
- name: sort
description: Sort the results.
in: query
schema:
type: string
enum:
- dateLastComment
- dateInserted
- discussionID
- -dateLastComment
- -dateInserted
- -discussionID
- name: insertUserID
description: 'Filter by author.
'
in: query
schema:
type: integer
x-filter:
field: d.InsertUserID
- name: insertUserRoleID
description: Filter by author role. One or more roleIDs can be passed in a CSV.
in: query
schema:
type: string
- name: insertUserRankID
description: Filter by author rank. One or more rankIDs can be passed in a CSV.
in: query
x-addon: ranks
schema:
type: string
- $ref: '#/components/parameters/discussionExpand'
- name: resolved
description: Filter by resolved status.
in: query
schema:
type: boolean
x-filter:
field: d.Resolved
- name: bookmarkUserID
description: Bookmarked by the UserID.
in: query
schema:
type: integer
allowEmptyValue: false
- name: participatedUserID
description: Commented (participated) on by the UserID.
in: query
schema:
type: integer
allowEmptyValue: false
- name: reactionType
description: Discussions for which the user has given the specified reaction.
in: query
schema:
type: string
- name: statusID
description: List of statusIDs to filter discussion by.
in: query
schema:
type: array
items:
type: integer
- name: internalStatusID
description: List of internalStatusIDs to filter discussion by.
in: query
schema:
type: array
items:
type: integer
- name: suggested
description: Filter discussion list based on user interests.
in: query
schema:
type: boolean
x-feature: suggestedContent.enabled
- name: excerptLength
description: Length of excerpts.
in: query
schema:
type: integer
- name: excludedCategoryIDs
description: Category IDs to exclude.
in: query
schema:
type: array
items:
type: integer
- $ref: '#/components/parameters/PostFieldFilters'
- 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/Discussion'
type: array
description: Success
tags:
- Discussions
summary: List discussions.
x-addon: vanilla
post:
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Discussion'
description: Success
'202':
content:
application/json:
schema:
$ref: '#/components/schemas/PostPremoderation'
description: Premoderation
tags:
- Discussions
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DiscussionPost'
required: true
summary: Add a discussion.
x-addon: vanilla
/discussions/bookmarked:
get:
parameters:
- $ref: '#/components/parameters/Page'
- description: 'Desired number of items per page.
'
in: query
name: limit
schema:
type: integer
default: 30
maximum: 100
minimum: 1
- $ref: '#/components/parameters/discussionExpand'
- 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/Discussion'
type: array
description: Success
tags:
- Discussions
summary: Get a list of the current user's bookmarked discussions.
x-addon: vanilla
/discussions/close:
patch:
requestBody:
content:
application/json:
schema:
type: object
description: An array of discussion IDs.
properties:
discussionIDs:
type: array
items:
type: integer
closed:
description: Whether to close (true) or open (false) this set of discussions.
type: boolean
responses:
'200':
description: Success
'202':
$ref: '#/components/responses/TrackingSlipResponse'
'403':
$ref: '#/components/responses/PermissionError'
'408':
$ref: '#/components/responses/LongRunnerResponse'
tags:
- Discussions
summary: Close/open a list of discussions.
x-addon: vanilla
/discussions/idea:
x-addon: ideation
post:
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Discussion'
description: Success
'202':
content:
application/json:
schema:
$ref: '#/components/schemas/PostPremoderation'
description: Premoderation
tags:
- Discussions
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DiscussionPost'
required: true
summary: Add an idea.
x-addon: vanilla
/discussions/list:
delete:
requestBody:
content:
application/json:
schema:
type: object
description: An array of discussion IDs.
properties:
discussionIDs:
type: array
items:
type: integer
example:
- 2452
- 14253
- 14124
responses:
'202':
$ref: '#/components/responses/TrackingSlipResponse'
'204':
description: Success
'403':
$ref: '#/components/responses/PermissionError'
'408':
$ref: '#/components/responses/LongRunnerResponse'
tags:
- Discussions
summary: Delete a list of discussions.
x-addon: vanilla
/discussions/merge:
patch:
requestBody:
content:
application/json:
schema:
type: object
properties:
discussionIDs:
description: An array of discussion IDs to merge together.
type: array
items:
type: integer
example:
- 2052
- 2053
- 5602
destinationDiscussionID:
description: The discussionID that everything will be merged into.
type: integer
example: 2052
addRedirects:
description: If a redirect discussion needs to be created.
type: boolean
example: true
responses:
'200':
description: Success
'202':
$ref: '#/components/responses/TrackingSlipResponse'
'403':
$ref: '#/components/responses/PermissionError'
'408':
$ref: '#/components/responses/LongRunnerResponse'
tags:
- Discussions
summary: Merge discussions.
x-addon: vanilla
/discussions/move:
patch:
requestBody:
content:
application/json:
schema:
type: object
description: An array of discussion IDs.
properties:
discussionIDs:
type: array
items:
type: integer
categoryID:
description: The category ID to move discussions into.
type: integer
addRedirects:
description: If a redirect discussion needs to be created.
type: boolean
postTypeID:
description: The post type ID to associate with the moved discussion.
type: string
responses:
'200':
description: Success
'202':
$ref: '#/components/responses/TrackingSlipResponse'
'403':
$ref: '#/components/responses/PermissionError'
'408':
$ref: '#/components/responses/LongRunnerResponse'
tags:
- Discussions
summary: Move a list of discussions.
x-addon: vanilla
/discussions/muted:
get:
parameters:
- $ref: '#/components/parameters/Page'
- description: 'Desired number of items per page.
'
in: query
name: limit
schema:
type: integer
default: 30
maximum: 100
minimum: 1
- $ref: '#/components/parameters/discussionExpand'
- 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/Discussion'
type: array
description: Success
tags:
- Discussions
summary: Get a list of the current user's muted discussions.
x-addon: vanilla
/discussions/poll:
x-addon: polls
post:
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Discussion'
description: Success
'202':
content:
application/json:
schema:
$ref: '#/components/schemas/PostPremoderation'
description: Premoderation
tags:
- Discussions
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DiscussionPost'
required: true
summary: Add a poll.
x-addon: vanilla
/discussions/question:
x-addon: qna
post:
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Discussion'
description: Success
'202':
content:
application/json:
schema:
$ref: '#/components/schemas/PostPremoderation'
description: Premoderation
tags:
- Discussions
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DiscussionPost'
required: true
summary: Add a discussion.
x-addon: vanilla
/discussions/resolve-bulk:
post:
summary: Mark all discussions you can triage as resolved.
responses:
'201':
description: Success
tags:
- Discussions
x-addon: vanilla
/discussions/search:
get:
parameters:
- description: 'The numeric ID of a category to limit search results to.
'
in: query
name: categoryID
schema:
type: integer
- description: 'Limit results to those in followed categories. Cannot be used with the categoryID parameter.
'
in: query
name: followed
schema:
type: boolean
- description: 'Search terms.
'
in: query
name: query
required: true
schema:
minLength: 1
type: string
- $ref: '#/components/parameters/Page'
- description: 'Desired number of items per page.
'
in: query
name: limit
schema:
type: integer
default: 30
maximum: 100
minimum: 1
- description: 'Expand associated records.
'
in: query
name: expand
schema:
default: false
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/Discussion'
type: array
description: Success
tags:
- Discussions
summary: Search discussions.
x-addon: vanilla
/discussions/split:
post:
requestBody:
content:
application/json:
schema:
type: object
properties:
newPost:
type: object
description: Date about new discussion to create.
properties:
name:
description: Name of the new discussion.
type: string
body:
description: The body of the discussion.
type: string
format:
$ref: '#/components/schemas/Format'
categoryID:
description: Category ID for the new discussion.
type: integer
postType:
description: Post type of the discussion.
type: string
authorType:
description: Author of the new discussion.
type: string
enum:
- me
- System
required:
- name
- categoryID
- postType
- authorType
commentIDs:
description: Comment IDs to split out into its own discussion.
type: array
items:
type: integer
required:
- commentIDs
- newPost
responses:
'200':
description: Success
'202':
$ref: '#/components/responses/TrackingSlipResponse'
'403':
$ref: '#/components/responses/PermissionError'
'408':
$ref: '#/components/responses/LongRunnerResponse'
tags:
- Discussions
summary: Split comments out into a discussion.
x-addon: vanilla
/discussions/{id}:
delete:
parameters:
- description: 'The discussion ID.
'
in: path
name: id
required: true
schema:
type: integer
- $ref: '#/components/parameters/discussionExpand'
responses:
'202':
$ref: '#/components/responses/TrackingSlipResponse'
'204':
description: Success
'403':
$ref: '#/components/responses/PermissionError'
'408':
$ref: '#/components/responses/LongRunnerResponse'
tags:
- Discussions
summary: Delete a discussion.
x-addon: vanilla
get:
parameters:
- description: 'The discussion ID.
'
in: path
name: id
required: true
schema:
type: integer
- $ref: '#/components/parameters/discussionExpand'
- 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/Discussion'
description: Success
tags:
- Discussions
summary: Get a discussion.
x-addon: vanilla
patch:
parameters:
- description: The discussion ID.
in: path
name: id
required: true
schema:
type: integer
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Discussion'
description: Success
'202':
content:
application/json:
schema:
$ref: '#/components/schemas/PostPremoderation'
description: Premoderation
tags:
- Discussions
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DiscussionPatch'
required: true
summary: Update a discussion.
x-addon: vanilla
/discussions/{id}/bookmark:
put:
parameters:
- description: The discussion ID.
in: path
name: id
required: true
schema:
type: integer
responses:
'200':
content:
application/json:
schema:
properties:
bookmarked:
description: The current bookmark value.
type: boolean
required:
- bookmarked
type: object
description: Success
tags:
- Discussions
requestBody:
content:
application/json:
schema:
properties:
bookmarked:
description: Pass true to bookmark or false to remove bookmark.
type: boolean
required:
- bookmarked
type: object
required: true
summary: Bookmark a discussion.
x-addon: vanilla
/discussions/{id}/bump:
patch:
summary: Bump a discussion higher in the list by updating the DateLastComment field.
tags:
- Discussions
parameters:
- description: The discussion ID.
in: path
name: id
required: true
schema:
type: integer
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Discussion'
description: Success
'404':
description: Not Found
'400':
description: Bad Request
x-addon: vanilla
/discussions/{id}/canonical-url:
put:
parameters:
- description: The discussion ID.
in: path
name: id
required: true
schema:
type: integer
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Discussion'
description: Success
'404':
description: Not Found
'400':
description: Bad Request
tags:
- Discussions
requestBody:
content:
application/json:
schema:
properties:
canonicalUrl:
description: Canonical url for discussion.
type: string
required:
- canonicalUrl
type: object
required: true
summary: Set custom canonical url for a discussion.
x-addon: vanilla
delete:
parameters:
- description: The discussion ID.
in: path
name: id
required: true
schema:
type: integer
responses:
'204':
description: Success
'404':
description: Not Found
tags:
- Discussions
summary: Remove custom canonical url for a discussion.
x-addon: vanilla
/discussions/{id}/dismiss:
put:
parameters:
- description: The discussion ID.
in: path
name: id
required: true
schema:
type: integer
responses:
'200':
content:
application/json:
schema:
properties:
dismissed:
description: The current dismiss value.
default: true
type: boolean
type: object
description: Success
tags:
- Discussions
requestBody:
content:
application/json:
schema:
properties:
dismissed:
description: Pass true to dismiss the announcement or false to remove the dismissal.
type: boolean
type: object
required: true
summary: Dismiss an announcement.
x-addon: vanilla
/discussions/{id}/edit:
get:
parameters:
- description: 'The discussion ID.
'
in: path
name: id
required: true
schema:
type: integer
- $ref: '#/components/parameters/discussionExpand'
- 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/DiscussionGetEdit'
description: Success
tags:
- Discussions
summary: Get a discussion for editing.
x-addon: vanilla
/discussions/{id}/idea:
x-addon: ideation
patch:
parameters:
- in: path
name: id
required: true
schema:
type: integer
responses:
'200':
content:
application/json:
schema:
properties:
statusID:
description: Idea status ID.
type: integer
statusNotes:
description: Notes on a status change. Notes will persist until overwritten.
minLength: 1
nullable: true
type: string
required:
- statusID
- statusNotes
type: object
description: Success
tags:
- Discussions
requestBody:
content:
application/json:
schema:
properties:
statusID:
description: Idea status ID.
type: integer
statusNotes:
description: Notes on a status change. Notes will persist until overwritten.
minLength: 1
nullable: true
type: string
required:
- statusID
- statusNotes
type: object
required: true
summary: Update idea metadata on a discussion.
x-addon: vanilla
/discussions/{id}/mute:
put:
parameters:
- description: The discussion ID.
in: path
name: id
required: true
schema:
type: integer
responses:
'200':
content:
application/json:
schema:
properties:
muted:
description: The current muted value.
type: boolean
required:
- muted
type: object
description: Success
tags:
- Discussions
requestBody:
content:
application/json:
schema:
properties:
muted:
description: Pass true to mute or false to unmute a discussion.
type: boolean
required:
- muted
type: object
required: true
x-addon: vanilla
/discussions/{id}/poll:
x-addon: polls
get:
parameters:
- description: 'The Discussion ID.
'
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/Discussion'
properties:
countOptions:
description: The number of options to choose from.
type: integer
countVotes:
description: The number of votes.
type: integer
dateInserted:
description: When the poll was created.
format: date-time
type: string
dateUpdated:
description: When the poll was updated.
format: date-time
nullable: true
type: string
discussionID:
description: The discussion the poll is displayed in.
type: integer
insertUser:
$ref: '#/components/schemas/UserFragment'
insertUserID:
description: The unique ID of the user who created this poll.
type: integer
name:
description: The name of the poll.
minLength: 1
type: string
pollID:
description: The unique ID of the poll.
type: integer
updateUser:
$ref: '#/components/schemas/UserFragment'
updateUserID:
description: The u
# --- truncated at 32 KB (82 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/vanilla-forums/refs/heads/main/openapi/vanilla-forums-discussions-api-openapi.yml