You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

10873 lines
436 KiB
YAML

openapi: 3.0.0
info:
title: nodebb
version: 1.13.2
license:
name: GPL-3.0
description: >-
# Overview
The following document outlines every Read API route available via NodeBB. Unlike the write API, the v1.x API was coded organically, and is **not** strictly RESTful. These shortcomings will be addressed in time as the APIs mature.
## Shortcomings
The Read API is named because its primary use is by NodeBB itself when navigating between pages. Therefore, the routes almost universally always follow the same path as actual pages on NodeBB itself. There are also a small number of non-`GET` routes, which doesn't necessarily make sense in a Read API. These will be merged into the Write API in time.
## Authentication
### Cookie Authentication
This default authentication behaviour of this API is via cookie jar to find a valid session. A valid login session is required for API calls that pertain to operations involving a logged-in user. For example, `/api/unread` is a route showing unread topics, and is not accessible by guest users.
### Bearer Authentcation
The Write API offers bearer authentication, as administered through the administration panel.
* For NodeBB v1.x, this is provided by [`nodebb-plugin-write-api`](https://github.com/NodeBB/nodebb-plugin-write-api).
* For NodeBB v2.x+ (in development), the Write API is available in core, and bearer authentication is available out-of-the-box
### JSON Web Token (JWT)
The Write API also consumes valid JWTs as payload bodies, when signed with a server-generated key. The same restrictions apply as above, with Bearer Authentication (re: NodeBB v1.x vs v2.x).
tags:
- name: home
description: Routes used at the forum index only
- name: categories
description: Category hierarchy and navigation
- name: topics
- name: posts
- name: users
- name: authentication
description: User authentication (e.g. login/registration)
- name: groups
description: User groups
- name: admin
description: Administrative Control Panel (ACP) routing
- name: emails
description: Email utilities
- name: flags
description: Reporting of content by users
- name: notifications
description: Real-time notifications
- name: search
- name: tags
description: Disparate method of categorizing topics
- name: shorthand
description: Convenience and utility routes for accessing other part of the API
paths:
/api/:
get:
tags:
- home
description: >
This route is used to populate the homepage of NodeBB. It is the main
access point of the forum, and shows a list of categories for navigation
purposes.
summary: Get forum index data
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
title:
type: string
categories:
type: array
items:
allOf:
- $ref: components/schemas/CategoryObject.yaml#/CategoryObject
- type: object
properties:
children:
type: array
items:
allOf:
- $ref: components/schemas/CategoryObject.yaml#/CategoryObject
- type: object
properties:
tagWhitelist:
type: array
items: {}
unread-class:
type: string
children:
type: array
items: {}
parent:
$ref: components/schemas/CategoryObject.yaml#/CategoryObject
posts:
type: array
items:
type: object
properties:
pid:
type: number
timestamp:
type: number
content:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to
users without an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction
with `icon:text` for the user's
auto-generated icon
example: "#f44336"
index:
type: number
cid:
type: number
description: A category identifier
parentCid:
type: number
description: The category identifier for the category that is the immediate
ancestor of the current category
topic:
type: object
properties:
slug:
type: string
title:
type: string
imageClass:
type: string
timesClicked:
type: number
posts:
type: array
items:
type: object
properties:
pid:
type: number
timestamp:
type: number
content:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users
without an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's
auto-generated icon
example: "#f44336"
index:
type: number
cid:
type: number
description: A category identifier
parentCid:
type: number
description: The category identifier for the category that is the immediate
ancestor of the current category
topic:
type: object
properties:
slug:
type: string
title:
type: string
teaser:
type: object
properties:
url:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
pid:
type: number
topic:
type: object
properties:
slug:
type: string
title:
type: string
topics:
type: array
items:
type: object
properties:
tid:
type: number
description: A topic identifier
uid:
type: number
description: A user identifier
cid:
type: number
description: A category identifier
mainPid:
type: number
description: The post id of the first post in this topic (also called the
"original post")
title:
type: string
slug:
type: string
timestamp:
type: number
lastposttime:
type: number
postcount:
type: number
viewcount:
type: number
deleted:
type: number
locked:
type: number
pinned:
type: number
description: Whether or not this particular topic is pinned to the top of the
category
upvotes:
type: number
downvotes:
type: number
titleRaw:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
lastposttimeISO:
type: string
votes:
type: number
category:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
slug:
type: string
icon:
type: string
image:
nullable: true
imageClass:
nullable: true
type: string
bgColor:
type: string
color:
type: string
disabled:
type: number
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
reputation:
type: number
postcount:
type: number
picture:
nullable: true
type: string
signature:
nullable: true
type: string
banned:
type: number
status:
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
banned_until_readable:
type: string
oldUid:
type: number
groupTitle:
type: string
groupTitleArray:
type: array
items: {}
fullname:
type: string
teaser:
type: object
properties:
pid:
type: number
uid:
type: number
description: A user identifier
timestamp:
type: number
tid:
type: number
description: A topic identifier
content:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users
without an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's
auto-generated icon
example: "#f44336"
index:
type: number
tags:
type: array
items:
type: object
properties:
value:
type: string
valueEscaped:
type: string
color:
type: string
bgColor:
type: string
score:
type: number
isOwner:
type: boolean
ignored:
type: boolean
unread:
type: boolean
bookmark:
nullable: true
unreplied:
type: boolean
icons:
type: array
items: {}
index:
type: number
thumb:
type: string
teaserPid:
type: number
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/post/{pid}/raw":
get:
tags:
- posts
summary: Get a post's raw text
description: >-
This route returns the raw content of a post, without running it through any installed parsers. It it useful if you wish to populate a user control on the client-side with the raw input for editing purposes.
If you are using this on the client side DOM, be careful that appropriate sanitization measures are taken, as raw content will faithfully reproduce any script injections embedded in the post content.
parameters:
- name: pid
in: path
required: true
schema:
type: number
responses:
"200":
description: ""
content:
application/json:
schema:
type: object
properties:
pid:
type: number
content:
type: string
/api/admin:
get:
tags:
- admin
summary: /api/admin
responses:
"418":
description: "TODO: A proper response needs to be added. It is not really a teapot | This route is identical to /api/admin/general/dashboard. When the routes are split into separate files, replace this definition with a $ref to that route"
/api/admin/general/dashboard:
get:
tags:
- admin
summary: Get administrative dashboard
responses:
"200":
description: A JSON object containing dashboard data
content:
application/json:
schema:
allOf:
- type: object
properties:
version:
type: string
lookupFailed:
type: boolean
latestVersion:
type: string
upgradeAvailable:
type: boolean
currentPrerelease:
type: boolean
notices:
type: array
items:
type: object
properties:
done:
type: boolean
doneText:
type: string
notDoneText:
type: string
tooltip:
type: string
link:
type: string
stats:
type: array
items:
type: object
properties:
yesterday:
type: number
today:
type: number
lastweek:
type: number
thisweek:
type: number
lastmonth:
type: number
thismonth:
type: number
alltime:
type: number
dayIncrease:
type: string
dayTextClass:
type: string
weekIncrease:
type: string
weekTextClass:
type: string
monthIncrease:
type: string
monthTextClass:
type: string
name:
type: string
canRestart:
type: boolean
lastrestart:
type: object
properties:
uid:
type: number
description: A user identifier
ip:
type: string
timestamp:
type: number
user:
$ref: components/schemas/UserObject.yaml#/UserObject
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/general/languages:
get:
tags:
- admin
summary: Get language settings
responses:
"200":
description: A JSON object containing available languages and settings
content:
application/json:
schema:
allOf:
- type: object
properties:
languages:
type: array
items:
type: object
properties:
name:
type: string
description: Localised name of the language
code:
type: string
description: A language code (similar to ISO-639)
dir:
type: string
description: Directionality of the language
enum: [ltr, rtl]
selected:
type: boolean
description: Denotes the currently selected default system language on the forum
autoDetectLang:
type: integer
description: Whether the forum will attempt to guess language based on browser's `Accept-Language` header
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/general/sounds:
get:
tags:
- admin
summary: Get sound settings
responses:
"200":
description: A JSON object containing available sounds and settings
content:
application/json:
schema:
allOf:
- type: object
properties:
notification-sound:
type: array
items:
type: object
properties:
name:
type: string
sounds:
type: array
items:
type: object
properties:
name:
type: string
value:
type: string
selected:
type: boolean
chat-incoming-sound:
type: array
items:
type: object
properties:
name:
type: string
sounds:
type: array
items:
type: object
properties:
name:
type: string
value:
type: string
selected:
type: boolean
chat-outgoing-sound:
type: array
items:
type: object
properties:
name:
type: string
sounds:
type: array
items:
type: object
properties:
name:
type: string
value:
type: string
selected:
type: boolean
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/general/navigation:
get:
tags:
- admin
summary: Get navigation bar settings
responses:
"200":
description: A JSON object containing navigation settings
content:
application/json:
schema:
allOf:
- type: object
properties:
enabled:
type: array
items:
type: object
properties:
route:
type: string
description: Relative URL to the page the navigation item goes to
title:
type: string
description: Tooltip text
enabled:
type: boolean
iconClass:
type: string
description: A FontAwesome icon string
textClass:
type: string
description: HTML class applied to the text label for this navigation item
text:
type: string
description: Label text for this navigation item
order:
type: integer
description: Ordinality of this item, lower value appears earlier
groups:
type: array
items:
type: object
properties:
displayName:
type: string
selected:
type: boolean
index:
type: integer
description: Seemingly identical to order, but an integer instead of a string
selected:
type: boolean
available:
type: array
items:
type: object
properties:
route:
type: string
description: Relative URL to the page the navigation item goes to
title:
type: string
description: Tooltip text
enabled:
type: boolean
iconClass:
type: string
description: A FontAwesome icon string
textClass:
type: string
description: HTML class applied to the text label for this navigation item
text:
type: string
description: Label text for this navigation item
core:
type: boolean
description: Whether the navigation item is provided by core or not (a plugin)
groups:
type: array
items:
type: object
properties:
displayName:
type: string
selected:
type: boolean
groups:
type: array
items:
type: object
properties:
name:
type: string
displayName:
type: string
navigation:
type: array
description: A clone of `enabled`
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/general/homepage:
get:
tags:
- admin
summary: /api/admin/general/homepage
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
routes:
type: array
items:
type: object
properties:
route:
type: string
name:
type: string
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/general/social:
get:
tags:
- admin
summary: Get post social sharing settings
responses:
"200":
description: "A JSON object containing post social sharing settings"
content:
application/json:
schema:
allOf:
- type: object
properties:
posts:
type: array
items:
type: object
properties:
id:
type: string
name:
type: string
class:
type: string
description: A FontAwesome icon string
activated:
type: boolean
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/manage/categories:
get:
tags:
- admin
summary: /api/admin/manage/categories
responses:
"200":
description: ""
content:
application/json:
schema:
$ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/admin/manage/categories/{category_id}":
get:
tags:
- admin
summary: /api/admin/manage/categories/{category_id}
parameters:
- name: category_id
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
category:
allOf:
- $ref: components/schemas/CategoryObject.yaml#/CategoryObject
- type: object
properties:
tagWhitelist:
type: array
items: {}
unread-class:
type: string
parent:
$ref: components/schemas/CategoryObject.yaml#/CategoryObject
allCategories:
type: array
items:
type: object
properties:
text:
type: string
value:
type: number
selected:
type: boolean
customClasses:
type: array
items: {}
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/admin/manage/categories/{category_id}/analytics":
get:
tags:
- admin
summary: /api/admin/manage/categories/{category_id}/analytics
parameters:
- name: category_id
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
name:
type: string
analytics:
type: object
properties:
pageviews:hourly:
type: array
items:
type: number
pageviews:daily:
type: array
items:
type: number
topics:daily:
type: array
items:
type: number
posts:daily:
type: array
items:
type: number
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/admin/manage/privileges/{cid?}":
get:
tags:
- admin
summary: /api/admin/manage/privileges/{cid?}
parameters:
- name: cid?
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
privileges:
type: object
properties:
labels:
type: object
properties:
users:
type: array
items:
type: object
properties:
name:
type: string
groups:
type: array
items:
type: object
properties:
name:
type: string
users:
type: array
items: {}
groups:
type: array
items:
type: object
properties:
name:
type: string
nameEscaped:
type: string
privileges:
type: object
properties:
groups:find:
type: boolean
groups:read:
type: boolean
groups:topics:read:
type: boolean
groups:topics:create:
type: boolean
groups:topics:reply:
type: boolean
groups:topics:tag:
type: boolean
groups:posts:edit:
type: boolean
groups:posts:history:
type: boolean
groups:posts:delete:
type: boolean
groups:posts:upvote:
type: boolean
groups:posts:downvote:
type: boolean
groups:topics:delete:
type: boolean
groups:posts:view_deleted:
type: boolean
groups:purge:
type: boolean
groups:moderate:
type: boolean
isPrivate:
type: boolean
columnCountUser:
type: number
columnCountUserOther:
type: number
columnCountGroup:
type: number
columnCountGroupOther:
type: number
categories:
type: array
items:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
icon:
type: string
selected:
type: boolean
level:
type: string
parentCid:
type: number
description: The category identifier for the category that is the immediate
ancestor of the current category
color:
type: string
bgColor:
type: string
imageClass:
type: string
selectedCategory:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
level:
type: string
icon:
type: string
parentCid:
type: number
description: The category identifier for the category that is the immediate
ancestor of the current category
color:
type: string
bgColor:
type: string
selected:
type: boolean
cid:
type: number
description: A category identifier
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/manage/tags:
get:
tags:
- admin
summary: Get tag settings
responses:
"200":
description: "A JSON object containing tag settings"
content:
application/json:
schema:
allOf:
- type: object
properties:
tags:
type: array
items:
type: object
properties:
value:
type: string
description: The tag name
score:
type: number
description: The number of topics containing this tag
valueEscaped:
type: string
color:
type: string
description: Six-character hexadecimal string (with `#` prepended)
example: "#ff0000"
bgColor:
type: string
description: Six-character hexadecimal string (with `#` prepended)
example: "#ff0000"
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/manage/post-queue:
get:
tags:
- admin
summary: Get post queue settings
responses:
"200":
description: "A JSON object containing post queue settings"
content:
application/json:
schema:
allOf:
- type: object
properties:
posts:
type: array
items:
type: object
properties:
id:
type: string
description: Unique ID given to this queued post
uid:
type: number
description: A user identifier
data:
type: object
description: Queued post data
properties:
title:
type: string
content:
type: string
thumb:
type: string
cid:
type: number
tags:
type: array
uid:
type: number
req:
type: object
properties:
uid:
type: number
ip:
type: string
host:
type: string
protocol:
type: string
secure:
type: boolean
url:
type: string
path:
type: string
headers:
type: object
properties:
host:
type: string
user-agent:
type: string
accept:
type: string
accept-language:
type: string
accept-encoding:
type: string
referer:
type: string
dnt:
type: string
connection:
type: string
cookie:
type: string
pragma:
type: string
cache-control:
type: string
timestamp:
type: number
fromQueue:
type: boolean
timestampISO:
type: string
rawContent:
type: string
type:
type: string
user:
type: object
properties:
username:
type: string
userslug:
type: string
picture:
type: string
uid:
type: number
icon:text:
type: string
icon:bgColor:
type: string
topic:
type: object
properties:
title:
type: number
cid:
type: number
category:
$ref: components/schemas/CategoryObject.yaml#/CategoryObject
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/manage/ip-blacklist:
get:
tags:
- admin
summary: Get IP blacklist settings
responses:
"200":
description: "A JSON object containing IP blacklist settings"
content:
application/json:
schema:
allOf:
- type: object
properties:
title:
type: string
rules:
type: string
description: A plain text string containing blocked IPs or IP ranges. Separate entries are separated by a newline (`\n`)
analytics:
type: object
properties:
daily:
type: array
description: The values here are shown in ascending order from 6 days ago, to the current day
items:
type: number
description: The number of requests blocked per day
hourly:
type: array
description: The values here are shown in ascending order from 23 hours ago, to the current hour
items:
type: number
description: The number of requests blocked per hour
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/manage/users:
get:
tags:
- admin
summary: /api/admin/manage/users
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
users:
type: array
items:
$ref: components/schemas/UserObject.yaml#/UserObject
page:
type: number
pageCount:
type: number
resultsPerPage:
type: number
latest:
type: boolean
search_display:
type: string
requireEmailConfirmation:
type: number
inviteOnly:
type: boolean
adminInviteOnly:
type: boolean
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/manage/users/search:
get:
tags:
- admin
summary: /api/admin/manage/users/search
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
search_display:
type: string
users:
type: array
items: {}
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/manage/users/latest:
get:
tags:
- admin
summary: /api/admin/manage/users/latest
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
users:
type: array
items:
$ref: components/schemas/UserObject.yaml#/UserObject
page:
type: number
pageCount:
type: number
resultsPerPage:
type: number
latest:
type: boolean
search_display:
type: string
requireEmailConfirmation:
type: number
inviteOnly:
type: boolean
adminInviteOnly:
type: boolean
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/manage/users/not-validated:
get:
tags:
- admin
summary: /api/admin/manage/users/not-validated
responses:
"418":
description: "TODO: A proper response needs to be added. It is not really a teapot | Replace this responses block with the block from /manage/users/latest"
/api/admin/manage/users/no-posts:
get:
tags:
- admin
summary: /api/admin/manage/users/no-posts
responses:
"418":
description: "TODO: A proper response needs to be added. It is not really a teapot | Replace this responses block with the block from /manage/users/latest"
/api/admin/manage/users/top-posters:
get:
tags:
- admin
summary: /api/admin/manage/users/top-posters
responses:
"418":
description: "TODO: A proper response needs to be added. It is not really a teapot | Replace this responses block with the block from /manage/users/latest"
/api/admin/manage/users/most-reputation:
get:
tags:
- admin
summary: /api/admin/manage/users/most-reputation
responses:
"418":
description: "TODO: A proper response needs to be added. It is not really a teapot | Replace this responses block with the block from /manage/users/latest"
/api/admin/manage/users/inactive:
get:
tags:
- admin
summary: /api/admin/manage/users/inactive
responses:
"418":
description: "TODO: A proper response needs to be added. It is not really a teapot | Replace this responses block with the block from /manage/users/latest"
/api/admin/manage/users/flagged:
get:
tags:
- admin
summary: /api/admin/manage/users/flagged
responses:
"418":
description: "TODO: A proper response needs to be added. It is not really a teapot | Replace this responses block with the block from /manage/users/latest"
/api/admin/manage/users/banned:
get:
tags:
- admin
summary: /api/admin/manage/users/banned
responses:
"418":
description: "TODO: A proper response needs to be added. It is not really a teapot | Replace this responses block with the block from /manage/users/latest"
/api/admin/manage/registration:
get:
tags:
- admin
summary: Get registration queue/invites
responses:
"200":
description: "A JSON object containing the registration queue and invites"
content:
application/json:
schema:
allOf:
- type: object
properties:
registrationQueueCount:
type: number
users:
type: array
items:
type: object
properties:
username:
type: string
email:
type: string
ip:
type: string
timestampISO:
type: string
usernameEscaped:
type: string
ipMatch:
type: array
items:
type: object
properties:
uid:
type: number
username:
type: string
picture:
type: string
icon:text:
type: string
icon:bgColor:
type: string
customActions:
type: array
items:
type: object
properties:
title:
type: string
id:
type: string
class:
type: string
icon:
type: string
customHeaders:
type: array
invites:
type: array
items:
type: object
properties:
uid:
type: number
invitations:
type: array
items:
type: object
properties:
email:
type: string
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/manage/admins-mods:
get:
tags:
- admin
summary: Get administrators and moderators
responses:
"200":
description: "A JSON object containing administrators and moderators globally and per-category"
content:
application/json:
schema:
allOf:
- type: object
properties:
admins:
$ref: components/schemas/GroupObject.yaml#/GroupObject
globalMods:
$ref: components/schemas/GroupObject.yaml#/GroupObject
categories:
type: array
items:
type: object
properties:
cid:
type: number
name:
type: string
level:
type: number
example: 0
icon:
type: string
description: A FontAwesome icon string
parentCid:
type: number
description: The parent category's identifier
color:
type: string
description: A six-character hexadecimal colour code
bgColor:
type: string
description: A six-character hexadecimal colour code
imageClass:
type: string
depth:
type: number
description: The depth of the category relative to the forum root (`0` is root level)
moderators:
type: array
items:
$ref: components/schemas/UserObject.yaml#/UserObjectSlim
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/manage/groups:
get:
tags:
- admin
summary: /api/admin/manage/groups
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
groups:
type: array
items:
type: object
properties:
name:
type: string
description:
type: string
deleted:
oneOf:
- type: number
- type: string
hidden:
type: number
system:
type: number
userTitle:
type: string
icon:
type: string
labelColor:
type: string
slug:
type: string
createtime:
type: number
memberCount:
type: number
private:
type: number
cover:url:
type: string
cover:position:
type: string
userTitleEnabled:
type: number
disableJoinRequests:
type: number
disableLeave:
type: number
nameEncoded:
type: string
displayName:
type: string
textColor:
type: string
createtimeISO:
type: string
cover:thumb:url:
type: string
ownerUid:
type: number
yourid:
type: number
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/admin/manage/groups/{name}":
get:
tags:
- admin
summary: /api/admin/manage/groups/{name}
parameters:
- name: name
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
group:
type: object
properties:
name:
type: string
slug:
type: string
createtime:
type: number
userTitle:
type: string
userTitleEnabled:
type: number
description:
type: string
memberCount:
type: number
hidden:
type: number
system:
type: number
private:
type: number
disableJoinRequests:
type: number
disableLeave:
type: number
icon:
type: string
labelColor:
type: string
textColor:
type: string
nameEncoded:
type: string
displayName:
type: string
createtimeISO:
type: string
cover:thumb:url:
type: string
cover:url:
type: string
cover:position:
type: string
descriptionParsed:
type: string
members:
type: array
items:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObject
- type: object
properties:
isOwner:
type: boolean
membersNextStart:
type: number
pending:
type: array
items: {}
invited:
type: array
items: {}
isMember:
type: boolean
isPending:
type: boolean
isInvited:
type: boolean
isOwner:
type: boolean
groupNames:
type: array
items:
type: object
properties:
encodedName:
type: string
displayName:
type: string
selected:
type: boolean
allowPrivateGroups:
type: number
maximumGroupNameLength:
type: number
maximumGroupTitleLength:
type: number
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/manage/uploads:
get:
tags:
- admin
summary: Get uploaded files
parameters:
- in: query
name: dir
schema:
type: string
description: Path of the folder, relative to `public/uploads/`
responses:
"200":
description: "A JSON object containing uploaded files"
content:
application/json:
schema:
allOf:
- type: object
properties:
currentFolder:
type: string
description: Path of the folder, relative to `public/uploads/`
showPids:
type: boolean
description: Whether or not the post identifiers should be shown (this is `true` only for `public/uploads/files/`, as that is where post uploads go)
files:
type: array
items:
type: object
properties:
name:
type: string
path:
type: string
description: Path relative to `currentFolder`
url:
type: string
description: Relative URL ready to be combined with `config.relative_path` on the client-side or templates
fileCount:
type: number
description: For directories, the number of files inside
size:
type: number
description: The size of the file/directory
sizeHumanReadable:
type: string
isDirectory:
type: boolean
isFile:
type: boolean
mtime:
type: number
description: Last modified time of the file, down to the microsecond (expressed as a UNIX timestamp)
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/manage/digest:
get:
tags:
- admin
summary: /api/admin/manage/digest
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
title:
type: string
delivery:
type: array
items:
type: object
properties:
username:
type: string
description: A friendly name for a given user account
picture:
nullable: true
type: string
uid:
type: number
description: A user identifier
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without an
avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with `icon:text`
for the user's auto-generated icon
example: "#f44336"
lastDelivery:
type: string
setting:
type: boolean
default:
type: string
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/admin/settings/{term?}":
get:
tags:
- admin
summary: /api/admin/settings/{term?}
parameters:
- name: term?
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
notificationSettings:
type: array
items:
type: object
properties:
name:
type: string
label:
type: string
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/admin/appearance/{term?}":
get:
tags:
- admin
summary: /api/admin/appearance/{term?}
parameters:
- name: term?
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
$ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/extend/plugins:
get:
tags:
- admin
summary: /api/admin/extend/plugins
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
installed:
type: array
items:
type: object
properties:
latest:
type: string
description:
type: string
name:
type: string
updated:
type: string
url:
type: string
numInstalls:
type: number
isCompatible:
type: boolean
id:
type: string
installed:
type: boolean
active:
type: boolean
isTheme:
type: boolean
error:
type: boolean
version:
type: string
license:
type: object
properties:
name:
type: string
text:
type: string
outdated:
type: boolean
settingsRoute:
type: string
installedCount:
type: number
activeCount:
type: number
inactiveCount:
type: number
upgradeCount:
type: number
download:
type: array
items:
type: object
properties:
name:
type: string
updated:
type: string
description:
type: string
latest:
type: string
url:
type: string
numInstalls:
type: number
isCompatible:
type: boolean
id:
type: string
installed:
type: boolean
active:
type: boolean
incompatible:
type: array
items:
type: object
properties:
latest:
type: string
description:
type: string
name:
type: string
updated:
type: string
url:
type: string
numInstalls:
type: number
isCompatible:
type: boolean
id:
type: string
installed:
type: boolean
active:
type: boolean
submitPluginUsage:
type: number
version:
type: string
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/extend/widgets:
get:
tags:
- admin
summary: /api/admin/extend/widgets
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
templates:
type: array
items:
type: object
properties:
template:
type: string
areas:
type: array
items:
type: object
properties:
name:
type: string
location:
type: string
areas:
type: array
items:
type: object
properties:
name:
type: string
template:
type: string
location:
type: string
data:
type: array
items:
type: object
properties:
widget:
type: string
data:
type: object
properties:
html:
type: string
cid:
type: string
title:
type: string
container:
type: string
groups:
type: array
items: {}
groupsHideFrom:
type: array
items: {}
hide-mobile:
type: string
numTags:
type: string
numUsers:
type: string
text:
type: string
parseAsPost:
type: string
numTopics:
type: string
availableWidgets:
type: array
items:
type: object
properties:
widget:
type: string
name:
type: string
description:
type: string
content:
type: string
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/extend/rewards:
get:
tags:
- admin
summary: Get rewards settings
responses:
"200":
description: "A JSON object containing rewards and their settings"
content:
application/json:
schema:
allOf:
- type: object
properties:
active:
type: array
items:
type: object
properties:
condition:
type: string
conditional:
type: string
value:
type: number
rid:
type: string
claimable:
type: string
id:
type: string
disabled:
type: boolean
rewards:
type: array
items:
additionalProperties: {}
description: Reward-specific properties
conditions:
type: array
items:
type: object
properties:
name:
type: string
condition:
type: string
conditionals:
type: array
items:
type: object
properties:
name:
type: string
conditional:
type: string
rewards:
type: array
items:
type: object
properties:
rid:
type: string
name:
type: string
inputs:
type: array
items:
type: object
properties:
type:
type: string
name:
type: string
label:
type: string
values:
type: array
items:
type: object
properties:
name:
type: string
value:
type: string
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/advanced/database:
get:
tags:
- admin
summary: /api/admin/advanced/database
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
redis:
type: object
properties:
aof_current_rewrite_time_sec:
type: string
aof_enabled:
type: string
aof_last_bgrewrite_status:
type: string
aof_last_rewrite_time_sec:
type: string
aof_rewrite_in_progress:
type: string
aof_rewrite_scheduled:
type: string
arch_bits:
type: string
blocked_clients:
type: string
client_biggest_input_buf:
type: string
client_longest_output_list:
type: string
config_file:
type: string
connected_clients:
type: string
connected_slaves:
type: string
db0:
type: string
evicted_keys:
type: string
expired_keys:
type: string
gcc_version:
type: string
hz:
type: string
instantaneous_ops_per_sec:
type: string
keyspace_hits:
type: string
keyspace_misses:
type: string
latest_fork_usec:
type: string
loading:
type: string
lru_clock:
type: string
master_repl_offset:
type: string
mem_allocator:
type: string
mem_fragmentation_ratio:
type: string
multiplexing_api:
type: string
os:
type: string
process_id:
type: string
pubsub_channels:
type: string
pubsub_patterns:
type: string
rdb_bgsave_in_progress:
type: string
rdb_changes_since_last_save:
type: string
rdb_current_bgsave_time_sec:
type: string
rdb_last_bgsave_status:
type: string
rdb_last_bgsave_time_sec:
type: string
rdb_last_save_time:
type: string
redis_build_id:
type: string
redis_git_dirty:
type: string
redis_git_sha1:
type: string
redis_mode:
type: string
redis_version:
type: string
rejected_connections:
type: string
repl_backlog_active:
type: string
repl_backlog_first_byte_offset:
type: string
repl_backlog_histlen:
type: string
repl_backlog_size:
type: string
role:
type: string
run_id:
type: string
sync_full:
type: string
sync_partial_err:
type: string
sync_partial_ok:
type: string
tcp_port:
type: string
total_commands_processed:
type: string
total_connections_received:
type: string
uptime_in_days:
type: string
uptime_in_seconds:
type: string
used_cpu_sys:
type: string
used_cpu_sys_children:
type: string
used_cpu_user:
type: string
used_cpu_user_children:
type: string
used_memory:
type: string
used_memory_human:
type: string
used_memory_lua:
type: string
used_memory_peak:
type: string
used_memory_peak_human:
type: string
used_memory_rss:
type: string
keys:
type: string
expires:
type: string
avg_ttl:
type: string
instantaneous_input:
type: string
instantaneous_output:
type: string
total_net_input:
type: string
total_net_output:
type: string
raw:
type: string
redis:
type: boolean
mongo:
type: object
properties:
db:
type: string
collections:
type: number
objects:
type: number
avgObjSize:
type: string
dataSize:
type: string
storageSize:
type: string
numExtents:
type: number
indexes:
type: number
indexSize:
type: string
ok:
type: number
mem:
type: object
properties:
bits:
type: number
resident:
type: string
virtual:
type: string
supported:
type: boolean
mapped:
type: string
mappedWithJournal:
type: number
collectionData:
type: array
items:
type: object
properties:
name:
type: string
count:
type: number
size:
type: number
avgObjSize:
type: number
storageSize:
type: number
totalIndexSize:
type: number
indexSizes:
type: object
properties:
_id_:
type: number
expireAt_1:
type: number
_key_1_score_-1:
type: number
_key_1_value_-1:
type: number
content_text_uid_1_cid_1:
type: number
network:
type: object
properties:
bytesIn:
type: string
bytesOut:
type: string
numRequests:
type: string
raw:
type: string
fileSize:
type: number
storageEngine:
type: string
host:
type: string
version:
type: string
uptime:
type: number
mongo:
type: boolean
/api/admin/advanced/events:
get:
tags:
- admin
summary: Get event log
parameters:
- in: query
name: type
schema:
type: string
description: Event name to filter by
- in: query
name: start
schema:
type: string
description: Start date to filter by
- in: query
name: end
schema:
type: string
description: End date to filter by
- in: query
name: perPage
schema:
type: string
description: Limit the number of events returned per page
responses:
"200":
description: "A JSON object containing "
content:
application/json:
schema:
allOf:
- type: object
properties:
events:
type: array
items:
type: object
properties:
type:
type: string
additionalProperties:
description: Each individual event as added by core/plugins can append their own metadata related to the event
- $ref: components/schemas/Pagination.yaml#/Pagination
- type: object
properties:
types:
type: array
items:
type: object
properties:
value:
type: string
name:
type: string
selected:
type: boolean
query:
additionalProperties:
description: An object containing the query string parameters, if any
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/advanced/hooks:
get:
tags:
- admin
summary: Get active plugin hooks
responses:
"200":
description: "A JSON object containing all hooks with active listeners"
content:
application/json:
schema:
allOf:
- type: object
properties:
hooks:
type: array
items:
type: object
properties:
hookName:
type: string
description: The name of the hook (also the name used in code)
methods:
type: array
items:
type: object
properties:
id:
type: string
description: Plugin listening to this hook
priority:
type: number
description: Priority level, lower priorities are executed earlier
method:
type: string
description: Stringified method for examination
index:
type: string
description: Internal counter used for DOM element ids
index:
type: string
description: Internal counter used for DOM element ids
count:
type: number
description: The number of listeners subscribed to this hook
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/advanced/logs:
get:
tags:
- admin
summary: Get server-side log output
responses:
"200":
description: "A JSON object containing the server-side log"
content:
application/json:
schema:
allOf:
- type: object
properties:
data:
type: string
description: Output of the server-side log file
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/advanced/errors:
get:
tags:
- admin
summary: Get server-side errors
responses:
"200":
description: "A JSON object containing server-side errors"
content:
application/json:
schema:
allOf:
- type: object
properties:
not-found:
type: array
items:
type: object
properties:
value:
type: string
description: Path to the requested URL that returned a 404
score:
type: number
description: The number of times that URL was requested
analytics:
type: object
properties:
not-found:
type: array
description: 404 responses groups by day, from 6 days ago, to present day
items:
type: number
toobusy:
type: array
description: 503 responses groups by day, from 6 days ago, to present day
items:
type: number
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/advanced/errors/export:
get:
tags:
- admin
summary: Export errors (.csv)
responses:
"200":
description: "A CSV file containing server-side errors"
content:
text/csv:
schema:
type: string
format: binary
/api/admin/advanced/cache:
get:
tags:
- admin
summary: /api/admin/advanced/cache
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
postCache:
type: object
properties:
length:
type: number
max:
type: number
itemCount:
type: number
percentFull:
type: string
avgPostSize:
type: number
hits:
type: string
misses:
type: string
hitRatio:
type: string
groupCache:
type: object
properties:
length:
type: number
max:
type: number
itemCount:
type: number
percentFull:
type: string
hits:
type: string
misses:
type: string
hitRatio:
type: string
localCache:
type: object
properties:
length:
type: number
max:
type: number
itemCount:
type: number
percentFull:
type: string
dump:
type: boolean
hits:
type: string
misses:
type: string
hitRatio:
type: string
objectCache:
type: object
properties:
length:
type: number
max:
type: number
itemCount:
type: number
percentFull:
type: string
hits:
type: string
misses:
type: string
hitRatio:
type: string
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/development/logger:
get:
tags:
- admin
summary: /api/admin/development/logger
responses:
"200":
description: ""
content:
application/json:
schema:
$ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/development/info:
get:
tags:
- admin
summary: Get process/system information
responses:
"200":
description: "A JSON object containing process and system information"
content:
application/json:
schema:
allOf:
- type: object
properties:
info:
type: array
items:
type: object
properties:
process:
type: object
properties:
port:
type: array
items:
type: number
pid:
type: number
description: Process id
title:
type: number
description: Executable
version:
type: number
description: NodeBB version
memoryUsage:
type: object
properties:
rss:
type: number
heapTotal:
type: number
heapUsed:
type: number
external:
type: number
humanReadable:
type: number
uptime:
type: number
cpuUsage:
type: object
properties:
user:
type: string
system:
type: string
os:
type: object
properties:
hostname:
type: string
type:
type: string
platform:
type: string
arch:
type: string
release:
type: string
load:
type: string
description: CPU load
git:
type: object
properties:
hash:
type: string
branch:
type: string
stats:
type: object
properties:
onlineGuestCount:
type: number
onlineRegisteredCount:
type: number
socketCount:
type: number
users:
type: object
properties:
categories:
type: number
recent:
type: number
unread:
type: number
topics:
type: number
category:
type: number
topics:
type: array
id:
type: string
infoJSON:
type: string
description: "`info`, but stringified"
port:
type: array
description: An array containing the port numbers configured to be used by NodeBB processes
items:
type: number
nodeCount:
type: number
description: The number of NodeBB application processes currently running
timeout:
type: number
ip:
type: string
loggedIn:
type: boolean
relative_path:
type: string
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/users/csv:
get:
tags:
- admin
summary: Get users export (.csv)
responses:
"200":
description: "A CSV file containing all registered users"
content:
text/csv:
schema:
type: string
format: binary
/api/admin/analytics:
get:
tags:
- admin
summary: Get site analytics
parameters:
- in: query
name: units
schema:
type: string
enum: [hours, days]
description: Whether to display dashboard data segmented daily or hourly
- in: query
name: until
schema:
type: number
description: A UNIX timestamp denoting the end of the analytics reporting period
- in: query
name: count
schema:
type: number
description: The number of entries to return (e.g. if `units` is `hourly`, and `count` is `24`, the result set will contain 24 hours' worth of analytics)
responses:
"200":
description: "A JSON object containing analytics data"
content:
application/json:
schema:
type: object
properties:
query:
additionalProperties:
description: The query string passed in
result:
type: object
properties:
uniquevisitors:
type: array
items:
type: number
pageviews:
type: array
items:
type: number
pageviews:registered:
type: array
items:
type: number
pageviews:bot:
type: array
items:
type: number
pageviews:guest:
type: array
items:
type: number
/api/admin/category/uploadpicture:
post:
tags:
- admin
summary: Update category picture (via image upload)
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
cid:
type: number
description: Category identifier whose picture will be set after successful upload
example: 1
files:
type: array
items:
type: string
format: binary
required:
- cid
- files
responses:
"200":
description: "Image uploaded"
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: The filename
url:
type: string
description: URL of the uploaded image for use client-side
/api/admin/uploadfavicon:
post:
tags:
- admin
summary: Upload favicon
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
files:
type: array
items:
type: string
format: binary
required:
- files
responses:
"200":
description: "Image uploaded"
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: The filename
url:
type: string
description: URL of the uploaded image for use client-side
/api/admin/uploadTouchIcon:
post:
tags:
- admin
summary: Upload Touch Icon
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
files:
type: array
items:
type: string
format: binary
required:
- files
responses:
"200":
description: "Image uploaded"
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: The filename
url:
type: string
description: URL of the uploaded image for use client-side
/api/admin/uploadlogo:
post:
tags:
- admin
summary: Upload site logo
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
files:
type: array
items:
type: string
format: binary
required:
- files
responses:
"200":
description: "Image uploaded"
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: The filename
url:
type: string
description: URL of the uploaded image for use client-side
/api/admin/uploadOgImage:
post:
tags:
- admin
summary: Upload site-wide Open Graph Image
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
files:
type: array
items:
type: string
format: binary
required:
- files
responses:
"200":
description: "Image uploaded"
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: The filename
url:
type: string
description: URL of the uploaded image for use client-side
/api/admin/upload/sound:
post:
tags:
- admin
summary: Upload sound file
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
files:
type: array
items:
type: string
format: binary
required:
- files
responses:
"200":
description: "Sound uploaded"
content:
application/json:
schema:
type: object
properties: {}
/api/admin/upload/file:
post:
tags:
- admin
summary: Upload a file
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
folder:
type: string
description: The folder to upload the files to (relative to `public/uploads/`)
files:
type: array
items:
type: string
format: binary
required:
- files
responses:
"200":
description: "File uploaded"
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: The filename
url:
type: string
description: URL of the uploaded file for use client-side
/api/admin/uploadDefaultAvatar:
post:
tags:
- admin
summary: Upload default avatar
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
files:
type: array
items:
type: string
format: binary
required:
- files
responses:
"200":
description: "Image uploaded"
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: The filename
url:
type: string
description: URL of the uploaded image for use client-side
/api/config:
get:
tags:
- home
summary: /api/config
responses:
"200":
description: ""
content:
application/json:
schema:
type: object
properties:
relative_path:
type: string
upload_url:
type: string
siteTitle:
type: string
browserTitle:
type: string
titleLayout:
type: string
showSiteTitle:
type: boolean
minimumTitleLength:
type: number
maximumTitleLength:
type: number
minimumPostLength:
type: number
maximumPostLength:
type: number
minimumTagsPerTopic:
type: number
maximumTagsPerTopic:
type: number
minimumTagLength:
type: number
maximumTagLength:
type: number
useOutgoingLinksPage:
type: boolean
allowGuestHandles:
type: boolean
allowFileUploads:
type: boolean
allowTopicsThumbnail:
type: boolean
usePagination:
type: boolean
disableChat:
type: boolean
disableChatMessageEditing:
type: boolean
maximumChatMessageLength:
type: number
socketioTransports:
type: array
items:
type: string
socketioOrigins:
type: string
websocketAddress:
type: string
maxReconnectionAttempts:
type: number
reconnectionDelay:
type: number
topicsPerPage:
type: number
postsPerPage:
type: number
maximumFileSize:
type: number
theme:id:
type: string
theme:src:
type: string
defaultLang:
type: string
userLang:
type: string
loggedIn:
type: boolean
uid:
type: number
description: A user identifier
cache-buster:
type: string
requireEmailConfirmation:
type: boolean
topicPostSort:
type: string
categoryTopicSort:
type: string
csrf_token:
type: string
searchEnabled:
type: boolean
bootswatchSkin:
type: string
enablePostHistory:
type: boolean
notificationAlertTimeout:
type: number
timeagoCutoff:
type: number
timeagoCodes:
type: array
items:
type: string
cookies:
type: object
properties:
enabled:
type: boolean
message:
type: string
dismiss:
type: string
link:
type: string
link_url:
type: string
acpLang:
type: string
topicSearchEnabled:
type: boolean
hideSubCategories:
type: boolean
hideCategoryLastPost:
type: boolean
enableQuickReply:
type: boolean
markdown:
type: object
properties:
highlight:
type: number
highlightLinesLanguageList:
type: array
items: {}
theme:
type: string
question-and-answer:
type: object
properties:
defaultCid_13:
type: string
defaultCid_1:
type: string
defaultCid_5:
type: string
forceQuestions:
type: string
defaultCid_2:
type: string
defaultCid_6:
type: string
defaultCid_3:
type: string
defaultCid_15:
type: string
defaultCid_7:
type: string
defaultCid_10:
type: string
defaultCid_16:
type: string
defaultCid_21:
type: string
defaultCid_8:
type: string
defaultCid_4:
type: string
defaultCid_14:
type: string
defaultCid_17:
type: string
defaultCid_18:
type: string
defaultCid_19:
type: string
defaultCid_20:
type: string
defaultCid_22:
type: string
defaultCid_26:
type: string
composer-default:
type: object
properties: {}
sso-google:
type: object
properties:
style:
type: string
/api/me:
get:
tags:
- shorthand
summary: /api/me
responses:
"200":
description: ""
content:
application/json:
schema:
$ref: components/schemas/UserObject.yaml#/UserObjectFull
"/api/user/uid/{uid}":
get:
tags:
- users
summary: /api/user/uid/{uid}
parameters:
- name: uid
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
$ref: components/schemas/UserObject.yaml#/UserObject
"/api/user/username/{username}":
get:
tags:
- users
summary: /api/user/username/{username}
parameters:
- name: username
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
$ref: components/schemas/UserObject.yaml#/UserObject
"/api/user/email/{email}":
get:
tags:
- users
summary: /api/user/email/{email}
parameters:
- name: email
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
$ref: components/schemas/UserObject.yaml#/UserObject
"/api/user/uid/{userslug}/export/posts":
get:
tags:
- users
summary: Export a user's posts (.csv)
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: "A CSV file containing a user's posts"
content:
text/csv:
schema:
type: string
format: binary
"/api/user/uid/{userslug}/export/uploads":
get:
tags:
- users
summary: /api/user/uid/{userslug}/export/uploads
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: Successful export of user uploads
content:
application/zip:
schema:
type: string
format: binary
"/api/user/uid/{userslug}/export/profile":
get:
tags:
- users
summary: /api/user/uid/{userslug}/export/profile
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: "A CSV file containing the user profile"
content:
text/csv:
schema:
type: string
format: binary
"/api/post/pid/{id}":
get:
tags:
- shorthand
summary: Get post data
parameters:
- name: id
in: path
required: true
schema:
type: number
responses:
"200":
description: "A JSON object containing post data"
content:
application/json:
schema:
type: object
properties:
uid:
type: number
tid:
type: number
timestamp:
type: number
content:
type: string
pid:
type: number
downvotes:
type: number
upvotes:
type: number
deleted:
type: number
deleterUid:
type: number
edited:
type: number
votes:
type: number
timestampISO:
type: string
editedISO:
type: string
upvoted:
type: boolean
downvoted:
type: boolean
"/api/topic/tid/{id}":
get:
tags:
- shorthand
summary: Get topic data
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
"200":
description: "A JSON object containing topic data"
content:
application/json:
schema:
type: object
properties:
tid:
type: number
uid:
type: number
cid:
type: number
mainPid:
type: number
title:
type: string
slug:
type: string
timestamp:
type: number
lastposttime:
type: number
postcount:
type: number
viewcount:
type: number
deleted:
type: number
locked:
type: number
pinned:
type: number
upvotes:
type: number
downvotes:
type: number
deleterUid:
type: number
titleRaw:
type: string
timestampISO:
type: string
lastposttimeISO:
type: string
votes:
type: number
"/api/category/cid/{id}":
get:
tags:
- shorthand
summary: Get category data
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
"200":
description: "A JSON object containing topic data"
content:
application/json:
schema:
type: object
properties:
cid:
type: number
name:
type: number
description:
type: string
descriptionParsed:
type: string
icon:
type: string
bgColor:
type: string
color:
type: string
slug:
type: string
parentCid:
type: number
topic_count:
type: number
post_count:
type: number
disabled:
type: number
order:
type: number
link:
type: string
numRecentReplies:
type: number
class:
type: string
imageClass:
type: string
isSection:
type: number
totalPostCount:
type: number
totalTopicCount:
type: number
/api/categories:
get:
tags:
- categories
summary: Get a list of categories
description: >
This route retrieve the list of categories currently available to the
accessing user. It doesn't necessarily mean that the user can *enter*
the category, as that is a separate privilege. Specifically, this route
will return all categories that grant the calling user the "Find
Category" privilege.
Subcategories are also returned, nested under a category's `children` property.
responses:
"200":
description: A list of category objectscurrently available to the accessing user
content:
application/json:
schema:
allOf:
- type: object
properties:
title:
description: The category title
type: string
categories:
description: A collection of category data objects
type: array
items:
allOf:
- $ref: components/schemas/CategoryObject.yaml#/CategoryObject
- type: object
properties:
tagWhitelist:
type: array
items: {}
unread-class:
type: string
children:
type: array
items:
allOf:
- $ref: components/schemas/CategoryObject.yaml#/CategoryObject
- type: object
properties:
tagWhitelist:
type: array
items: {}
unread-class:
type: string
children:
type: array
items:
$ref: components/schemas/CategoryObject.yaml#/CategoryObject
parent:
allOf:
- $ref: components/schemas/CategoryObject.yaml#/CategoryObject
- type: object
properties:
tagWhitelist:
type: array
items: {}
unread-class:
type: string
posts:
type: array
items:
type: object
properties:
pid:
type: number
timestamp:
type: number
content:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to
users without an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction
with `icon:text` for the user's
auto-generated icon
example: "#f44336"
index:
type: number
cid:
type: number
description: A category identifier
parentCid:
type: number
description: The category identifier for the category that is the immediate
ancestor of the current category
topic:
type: object
properties:
slug:
type: string
title:
type: string
imageClass:
type: string
timesClicked:
type: number
posts:
type: array
items:
type: object
properties:
pid:
type: number
timestamp:
type: number
content:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users
without an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's
auto-generated icon
example: "#f44336"
index:
type: number
cid:
type: number
description: A category identifier
parentCid:
type: number
description: The category identifier for the category that is the immediate
ancestor of the current category
topic:
type: object
properties:
slug:
type: string
title:
type: string
teaser:
type: object
properties:
url:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
pid:
type: number
topic:
type: object
properties:
slug:
type: string
title:
type: string
imageClass:
type: string
topics:
type: array
items:
type: object
properties:
tid:
type: number
description: A topic identifier
uid:
type: number
description: A user identifier
cid:
type: number
description: A category identifier
mainPid:
type: number
description: The post id of the first post in this topic (also called the
"original post")
title:
type: string
slug:
type: string
timestamp:
type: number
lastposttime:
type: number
postcount:
type: number
viewcount:
type: number
teaserPid:
type: number
upvotes:
type: number
downvotes:
type: number
deleted:
type: number
locked:
type: number
pinned:
type: number
description: Whether or not this particular topic is pinned to the top of the
category
titleRaw:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
lastposttimeISO:
type: string
votes:
type: number
category:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
slug:
type: string
icon:
type: string
image:
nullable: true
imageClass:
nullable: true
type: string
bgColor:
type: string
color:
type: string
disabled:
type: number
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
fullname:
type: string
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
reputation:
type: number
postcount:
type: number
picture:
nullable: true
type: string
signature:
nullable: true
type: string
banned:
type: number
status:
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
banned_until_readable:
type: string
teaser:
type: object
properties:
pid:
type: number
uid:
type: number
description: A user identifier
timestamp:
type: number
tid:
type: number
description: A topic identifier
content:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users
without an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's
auto-generated icon
example: "#f44336"
index:
type: number
tags:
type: array
items:
type: object
properties:
value:
type: string
valueEscaped:
type: string
color:
type: string
bgColor:
type: string
score:
type: number
isOwner:
type: boolean
ignored:
type: boolean
unread:
type: boolean
bookmark:
nullable: true
unreplied:
type: boolean
icons:
type: array
items: {}
index:
type: number
thumb:
type: string
isQuestion:
nullable: true
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/categories/{cid}/moderators":
get:
tags:
- categories
summary: Get mods for a category
description: >
This route returns an array of uids that correspond to the moderators
for the category in question.
parameters:
- name: cid
description: The category identifier for the category you wish to look up
in: path
required: true
schema:
type: number
responses:
"200":
description: An array of moderators for the requested category
content:
application/json:
schema:
type: object
properties:
moderators:
type: array
example:
moderators:
- 1
- 2
- 3
"/api/recent/posts/{term?}":
get:
tags:
- topics
summary: /api/recent/posts/{term?}
parameters:
- name: term?
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
$ref: components/schemas/PostsObject.yaml#/PostsObject
/api/unread/total:
get:
tags:
- posts
summary: Get number of unread topics
responses:
"200":
description: "Success"
content:
text/plain:
schema:
type: number
"/api/topic/teaser/{topic_id}":
get:
tags:
- topics
summary: Get a topic's teaser post
parameters:
- name: topic_id
in: path
required: true
schema:
type: string
responses:
"200":
description: "A JSON object containing the teaser post for a topic"
content:
application/json:
schema:
$ref: components/schemas/PostsObject.yaml#/PostsObject
"/api/topic/pagination/{topic_id}":
get:
tags:
- topics
summary: /api/topic/pagination/{topic_id}
parameters:
- name: topic_id
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
type: object
properties:
rel:
type: array
items:
type: object
properties:
rel:
type: string
href:
type: string
pages:
type: array
items:
type: object
properties:
page:
type: number
active:
type: boolean
qs:
type: string
currentPage:
type: number
pageCount:
type: number
prev:
type: object
properties:
page:
type: number
active:
type: boolean
qs:
type: string
next:
type: object
properties:
page:
type: number
active:
type: boolean
qs:
type: string
first:
type: object
properties:
page:
type: number
active:
type: boolean
qs:
type: string
last:
type: object
properties:
page:
type: number
active:
type: boolean
qs:
type: string
/api/post/upload:
post:
tags:
- posts
summary: /api/post/upload
responses:
"200":
description: ""
content:
application/json:
schema:
type: array
items:
type: object
properties:
name:
type: string
url:
type: string
text/plain:
schema:
type: array
items:
type: object
properties:
name:
type: string
url:
type: string
"403":
description: ""
content:
application/json:
schema:
type: string
example: Forbidden
text/plain:
schema:
type: string
example: Forbidden
"500":
description: ""
content:
application/json:
schema:
type: object
properties:
path:
type: string
error:
type: string
text/plain:
schema:
type: object
properties:
path:
type: string
error:
type: string
/api/topic/thumb/upload:
post:
tags:
- topics
summary: Upload topic thumb
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
files:
type: array
items:
type: string
format: binary
required:
- files
responses:
"200":
description: "Image uploaded"
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: The filename
url:
type: string
description: URL of the uploaded image for use client-side
path:
type: string
description: Path to the file in the local file system
/api/login:
get:
tags:
- authentication
summary: /api/login
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
loginFormEntry:
type: array
items: {}
alternate_logins:
type: boolean
authentication:
type: array
items:
type: object
properties:
name:
type: string
url:
type: string
callbackURL:
type: string
icon:
type: string
scope:
type: string
prompt:
type: string
allowRegistration:
type: boolean
allowLoginWith:
type: string
title:
type: string
allowPasswordReset:
type: boolean
allowLocalLogin:
type: boolean
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/register:
get:
tags:
- authentication
summary: /api/register
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
register_window:spansize:
type: string
alternate_logins:
type: boolean
authentication:
type: array
items:
type: object
properties:
name:
type: string
url:
type: string
callbackURL:
type: string
icon:
type: string
scope:
type: string
prompt:
type: string
minimumUsernameLength:
type: number
maximumUsernameLength:
type: number
minimumPasswordLength:
type: number
minimumPasswordStrength:
type: number
regFormEntry:
type: array
items:
type: object
properties:
label:
type: string
html:
type: string
styleName:
type: string
title:
type: string
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/register/complete:
get:
tags:
- authentication
summary: /api/register/complete
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
title:
type: string
errors:
type: array
items: {}
sections:
type: array
items:
type: string
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/search:
get:
tags:
- search
summary: /api/search
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
posts:
$ref: components/schemas/PostsObject.yaml#/PostsObject
matchCount:
type: number
pageCount:
type: number
time:
type: string
multiplePages:
type: boolean
search_query:
type: string
term:
type: string
categories:
type: array
items:
type: object
properties:
value:
oneOf:
- type: string
- type: number
text:
type: string
categoriesCount:
type: number
expandSearch:
type: boolean
showAsPosts:
type: boolean
showAsTopics:
type: boolean
title:
type: string
searchDefaultSortBy:
type: string
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/reset":
get:
tags:
- authentication
summary: Get user password reset (step 1)
responses:
"200":
description: "A JSON object containing the 1st step of the user password reset flow"
content:
application/json:
schema:
allOf:
- type: object
properties:
code:
type: string
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/reset/{code}":
get:
tags:
- authentication
summary: Get user password reset (step 2)
parameters:
- name: code
in: path
required: true
schema:
type: string
responses:
"200":
description: "A JSON object containing the 2nd step of the user password reset flow"
content:
application/json:
schema:
allOf:
- type: object
properties:
valid:
type: boolean
code:
type: string
minimumPasswordLength:
type: number
minimumPasswordStrength:
type: number
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/email/unsubscribe/{token}":
get:
tags:
- emails
summary: /api/email/unsubscribe/{token}
parameters:
- name: token
in: path
required: true
schema:
type: string
responses:
"200":
description: "Successfully unsubscribed"
"500":
description: "Server-side error (likely token verification failure)"
"/api/topic/{topic_id}/{slug}/{post_index?}":
get:
tags:
- topics
summary: /api/topic/{topic_id}/{slug}/{post_index?}
parameters:
- name: topic_id
in: path
required: true
schema:
type: string
- name: slug
in: path
required: true
schema:
type: string
- name: post_index?
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/CategoryObject.yaml#/CategoryObject
- type: object
properties:
tid:
type: number
description: A topic identifier
uid:
type: number
description: A user identifier
cid:
type: number
description: A category identifier
mainPid:
type: number
description: The post id of the first post in this topic (also called the
"original post")
title:
type: string
slug:
type: string
timestamp:
type: number
lastposttime:
type: number
postcount:
type: number
viewcount:
type: number
teaserPid:
type: number
upvotes:
type: number
downvotes:
type: number
deleted:
type: number
locked:
type: number
pinned:
type: number
description: Whether or not this particular topic is pinned to the top of the
category
titleRaw:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
lastposttimeISO:
type: string
votes:
type: number
tags:
type: array
items:
type: object
properties:
value:
type: string
valueEscaped:
type: string
color:
type: string
bgColor:
type: string
score:
type: number
posts:
type: array
items:
type: object
properties:
pid:
type: number
uid:
type: number
description: A user identifier
tid:
type: number
description: A topic identifier
content:
type: string
timestamp:
type: number
votes:
type: number
deleted:
type: number
upvotes:
type: number
downvotes:
type: number
deleterUid:
type: number
edited:
type: number
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
editedISO:
type: string
index:
type: number
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
reputation:
type: number
postcount:
type: number
topiccount:
type: number
picture:
type: string
signature:
type: string
banned:
type: number
banned:expire:
type: number
status:
type: string
lastonline:
type: number
groupTitle:
nullable: true
type: string
groupTitleArray:
type: array
items:
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
lastonlineISO:
type: string
banned_until:
type: number
banned_until_readable:
type: string
selectedGroups:
type: array
items:
type: object
properties:
name:
type: string
slug:
type: string
labelColor:
type: string
textColor:
type: string
icon:
type: string
userTitle:
type: string
custom_profile_info:
type: array
items: {}
editor:
nullable: true
bookmarked:
type: boolean
upvoted:
type: boolean
downvoted:
type: boolean
replies:
type: object
properties:
hasMore:
type: boolean
users:
type: array
items: {}
text:
type: string
count:
type: number
selfPost:
type: boolean
display_edit_tools:
type: boolean
display_delete_tools:
type: boolean
display_moderator_tools:
type: boolean
display_move_tools:
type: boolean
display_post_menu:
type: boolean
tagWhitelist:
type: array
items: {}
thread_tools:
type: array
items:
type: object
properties:
class:
type: string
title:
type: string
icon:
type: string
isFollowing:
type: boolean
isNotFollowing:
type: boolean
isIgnoring:
type: boolean
bookmark:
nullable: true
postSharing:
type: array
items:
type: object
properties:
id:
type: string
name:
type: string
class:
type: string
activated:
type: boolean
deleter:
nullable: true
merger:
nullable: true
related:
type: array
items: {}
unreplied:
type: boolean
icons:
type: array
items: {}
privileges:
type: object
properties:
topics:reply:
type: boolean
topics:read:
type: boolean
topics:tag:
type: boolean
topics:delete:
type: boolean
posts:edit:
type: boolean
posts:history:
type: boolean
posts:delete:
type: boolean
posts:view_deleted:
type: boolean
read:
type: boolean
purge:
type: boolean
view_thread_tools:
type: boolean
editable:
type: boolean
deletable:
type: boolean
view_deleted:
type: boolean
isAdminOrMod:
type: boolean
disabled:
type: number
tid:
type: string
uid:
type: number
description: A user identifier
topicStaleDays:
type: number
reputation:disabled:
type: number
downvote:disabled:
type: number
feeds:disableRSS:
type: number
bookmarkThreshold:
type: number
postEditDuration:
type: number
postDeleteDuration:
type: number
scrollToMyPost:
type: boolean
allowMultipleBadges:
type: boolean
privateUploads:
type: boolean
rssFeedUrl:
type: string
postIndex:
type: number
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/topic/{topic_id}/{slug?}":
get:
tags:
- topics
summary: /api/topic/{topic_id}/{slug?}
parameters:
- name: topic_id
in: path
required: true
schema:
type: string
- name: slug?
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/CategoryObject.yaml#/CategoryObject
- type: object
properties:
tid:
type: number
description: A topic identifier
uid:
type: number
description: A user identifier
cid:
type: number
description: A category identifier
mainPid:
type: number
description: The post id of the first post in this topic (also called the
"original post")
title:
type: string
slug:
type: string
timestamp:
type: number
lastposttime:
type: number
postcount:
type: number
viewcount:
type: number
teaserPid:
type: number
upvotes:
type: number
downvotes:
type: number
deleted:
type: number
locked:
type: number
pinned:
type: number
description: Whether or not this particular topic is pinned to the top of the
category
titleRaw:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
lastposttimeISO:
type: string
votes:
type: number
tags:
type: array
items:
type: object
properties:
value:
type: string
valueEscaped:
type: string
color:
type: string
bgColor:
type: string
score:
type: number
posts:
type: array
items:
type: object
properties:
editor:
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
nullable: true
type: object
votes:
type: number
timestamp:
type: number
tid:
type: number
description: A topic identifier
content:
type: string
pid:
type: number
edited:
type: number
uid:
type: number
description: A user identifier
upvotes:
type: number
bookmarks:
type: number
replies:
type: object
properties:
hasMore:
type: boolean
users:
type: array
items:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users
without an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's
auto-generated icon
example: "#f44336"
administrator:
type: boolean
text:
type: string
count:
type: number
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
deleted:
type: number
downvotes:
type: number
deleterUid:
type: number
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
editedISO:
type: string
index:
type: number
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
fullname:
type: string
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
reputation:
type: number
postcount:
type: number
topiccount:
type: number
picture:
nullable: true
type: string
signature:
type: string
banned:
type: number
banned:expire:
type: number
status:
type: string
lastonline:
type: number
groupTitle:
nullable: true
type: string
groupTitleArray:
type: array
items:
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
lastonlineISO:
type: string
banned_until:
type: number
banned_until_readable:
type: string
selectedGroups:
type: array
items:
type: object
properties:
name:
type: string
slug:
type: string
labelColor:
type: string
textColor:
type: string
icon:
type: string
userTitle:
type: string
custom_profile_info:
type: array
items: {}
bookmarked:
type: boolean
upvoted:
type: boolean
downvoted:
type: boolean
selfPost:
type: boolean
display_edit_tools:
type: boolean
display_delete_tools:
type: boolean
display_moderator_tools:
type: boolean
display_move_tools:
type: boolean
display_post_menu:
type: boolean
toPid:
type: number
parent:
type: object
properties:
username:
type: string
description: A friendly name for a given user account
tagWhitelist:
type: array
items: {}
thread_tools:
type: array
items:
type: object
properties:
class:
type: string
title:
type: string
icon:
type: string
isFollowing:
type: boolean
isNotFollowing:
type: boolean
isIgnoring:
type: boolean
bookmark:
nullable: true
postSharing:
type: array
items:
type: object
properties:
id:
type: string
name:
type: string
class:
type: string
activated:
type: boolean
deleter:
nullable: true
merger:
nullable: true
related:
type: array
items: {}
unreplied:
type: boolean
icons:
type: array
items: {}
privileges:
type: object
properties:
topics:reply:
type: boolean
topics:read:
type: boolean
topics:tag:
type: boolean
topics:delete:
type: boolean
posts:edit:
type: boolean
posts:history:
type: boolean
posts:delete:
type: boolean
posts:view_deleted:
type: boolean
read:
type: boolean
purge:
type: boolean
view_thread_tools:
type: boolean
editable:
type: boolean
deletable:
type: boolean
view_deleted:
type: boolean
isAdminOrMod:
type: boolean
disabled:
type: number
tid:
type: string
uid:
type: number
description: A user identifier
topicStaleDays:
type: number
reputation:disabled:
type: number
downvote:disabled:
type: number
feeds:disableRSS:
type: number
bookmarkThreshold:
type: number
postEditDuration:
type: number
postDeleteDuration:
type: number
scrollToMyPost:
type: boolean
allowMultipleBadges:
type: boolean
privateUploads:
type: boolean
rssFeedUrl:
type: string
postIndex:
type: number
loggedInUser:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
picture:
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without an
avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with `icon:text` for
the user's auto-generated icon
example: "#f44336"
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/post/{pid}":
get:
tags:
- shorthand
summary: Access a specific post
description: This route comes in handy when all you have is the `pid`, and you want to redirect users to the canonical URL for the topic, with the appropriate topic slug and post index.
parameters:
- name: pid
in: path
required: true
schema:
type: string
responses:
"200":
description: "Canonical URL of topic"
content:
text/plain:
schema:
type: string
/api/flags:
get:
tags:
- flags
summary: /api/flags
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
flags:
type: array
items:
type: object
properties:
state:
type: string
flagId:
type: number
type:
type: string
targetId:
oneOf:
- type: string
- type: number
description:
type: string
uid:
type: number
description: A user identifier
datetime:
type: number
reporter:
type: object
properties:
username:
type: string
description: A friendly name for a given user account
picture:
nullable: true
type: string
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
labelClass:
type: string
target_readable:
type: string
datetimeISO:
type: string
assignee:
type: string
analytics:
type: array
items:
type: number
categories:
type: object
properties:
"1":
type: string
"2":
type: string
"3":
type: string
"4":
type: string
"5":
type: string
"6":
type: string
"7":
type: string
"10":
type: string
"13":
type: string
"14":
type: string
"15":
type: string
"16":
type: string
"17":
type: string
"18":
type: string
"19":
type: string
"21":
type: string
"22":
type: string
"26":
type: string
hasFilter:
type: boolean
filters:
type: object
properties:
page:
type: number
perPage:
type: number
title:
type: string
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/flags/{flagId}":
get:
tags:
- flags
summary: /api/flags/{flagId}
parameters:
- name: flagId
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
state:
type: string
flagId:
type: number
type:
type: string
targetId:
type: string
description:
type: string
uid:
type: number
description: A user identifier
datetime:
type: number
datetimeISO:
type: string
target_readable:
type: string
target:
type: object
properties: {}
history:
type: array
items:
type: object
properties:
uid:
type: number
description: A user identifier
fields:
type: object
properties:
state:
type: string
datetime:
type: number
datetimeISO:
type: string
user:
type: object
properties:
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
uid:
type: number
description: A user identifier
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
notes:
type: array
items: {}
reporter:
type: object
properties:
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
reputation:
type: number
uid:
type: number
description: A user identifier
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without an
avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with `icon:text` for
the user's auto-generated icon
example: "#f44336"
type_path:
type: string
assignees:
type: array
items:
$ref: components/schemas/UserObject.yaml#/UserObject
type_bool:
type: object
properties:
post:
type: boolean
user:
type: boolean
empty:
type: boolean
title:
type: string
categories:
type: object
additionalProperties:
type: string
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/post-queue:
get:
tags:
- admin
summary: /api/post-queue
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
title:
type: string
posts:
type: array
items:
allOf:
- type: object
properties:
id:
type: string
uid:
type: number
description: A user identifier
type:
type: string
data:
type: object
properties:
title:
type: string
content:
type: string
thumb:
type: string
cid:
oneOf:
- type: number
- type: string
tags:
type: array
items: {}
uid:
type: number
description: A user identifier
req:
type: object
properties:
uid:
type: number
description: A user identifier
ip:
type: string
host:
type: string
protocol:
type: string
secure:
type: boolean
url:
type: string
path:
type: string
headers:
type: object
properties:
x-real-ip:
type: string
x-forwarded-for:
type: string
x-forwarded-proto:
type: string
host:
type: string
x-nginx-proxy:
type: string
connection:
type: string
accept:
type: string
user-agent:
type: string
sec-fetch-site:
type: string
sec-fetch-mode:
type: string
referer:
type: string
accept-encoding:
type: string
accept-language:
type: string
cookie:
type: string
timestamp:
type: number
fromQueue:
type: boolean
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
rawContent:
type: string
tid:
type: number
description: A topic identifier
toPid:
nullable: true
user:
type: object
properties:
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
uid:
type: number
description: A user identifier
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
topic:
type: object
properties:
cid:
type: number
title:
type: string
titleRaw:
type: string
- $ref: components/schemas/CategoryObject.yaml#/CategoryObject
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/ip-blacklist:
get:
tags:
- admin
summary: /api/ip-blacklist
responses:
"418":
description: "TODO: A proper response needs to be added. It is not really a teapot | Copy response from corresponding admin route"
/api/registration-queue:
get:
tags:
- admin
summary: /api/registration-queue
responses:
"418":
description: "TODO: A proper response needs to be added. It is not really a teapot | Copy response from corresponding admin route"
"/api/tags/{tag}":
get:
tags:
- tags
summary: /api/tags/{tag}
description: Returns a list of topics that are tagged with {tag}
parameters:
- name: tag
description: The tag used to retrieve the topics
in: path
required: true
schema:
type: string
- name: page
description: Page number used in pagination
in: query
required: false
schema:
type: number
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
topics:
type: array
description: An array of topics that are all tagged with {tag}
items:
type: object
properties:
tid:
type: number
description: A topic identifier
uid:
type: number
description: A user identifier
cid:
type: number
description: A category identifier
mainPid:
type: number
description: The post id of the first post in this topic (also called the
"original post")
title:
type: string
slug:
type: string
timestamp:
type: number
lastposttime:
type: number
postcount:
type: number
viewcount:
type: number
teaserPid:
oneOf:
- type: number
- type: string
deleted:
type: number
locked:
type: number
pinned:
type: number
description: Whether or not this particular topic is pinned to the top of the
category
upvotes:
type: number
downvotes:
type: number
titleRaw:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
lastposttimeISO:
type: string
votes:
type: number
category:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
slug:
type: string
icon:
type: string
image:
nullable: true
imageClass:
nullable: true
type: string
bgColor:
type: string
color:
type: string
disabled:
type: number
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
reputation:
type: number
postcount:
type: number
picture:
nullable: true
type: string
signature:
nullable: true
type: string
banned:
type: number
status:
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
banned_until_readable:
type: string
fullname:
type: string
teaser:
type: object
properties:
pid:
type: number
uid:
type: number
description: A user identifier
timestamp:
type: number
tid:
type: number
description: A topic identifier
content:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users
without an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's
auto-generated icon
example: "#f44336"
index:
type: number
tags:
type: array
items:
type: object
properties:
value:
type: string
valueEscaped:
type: string
color:
type: string
bgColor:
type: string
score:
type: number
isOwner:
type: boolean
ignored:
type: boolean
unread:
type: boolean
bookmark:
nullable: true
unreplied:
type: boolean
icons:
type: array
items: {}
index:
type: number
thumb:
type: string
isQuestion:
nullable: true
type: number
isSolved:
type: number
tag:
type: string
title:
type: string
categories:
type: array
items:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
level:
type: string
icon:
type: string
parentCid:
type: number
description: The category identifier for the category that is the immediate
ancestor of the current category
color:
type: string
bgColor:
type: string
selected:
type: boolean
imageClass:
type: string
rssFeedUrl:
type: string
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/tags:
get:
tags:
- tags
summary: /api/tags
description: Returns a list of tags sorted by the most topics
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
tags:
type: array
description: An array of tags sorted by the most topics
items:
type: object
properties:
value:
type: string
description: The raw tag
score:
type: number
description: Number of topics tagged by this tag
valueEscaped:
type: string
description: This is the escaped tag value, equal to validator.escape(value)
color:
type: string
bgColor:
type: string
displayTagSearch:
type: boolean
nextStart:
type: number
title:
type: string
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/popular:
get:
tags:
- topics
summary: Popular Topics
description: Returns a list of topics sorted by most replies. In an event of a
tie breaker, the topic with the most views. Can be filtered by All Time,
Day, Week, or Month.
responses:
"200":
description: An array of topic objects sorted by most replies and views.
content:
application/json:
schema:
allOf:
- type: object
properties:
nextStart:
type: number
topicCount:
type: number
topics:
type: array
items:
type: object
properties:
tid:
type: number
description: A topic identifier
uid:
type: number
description: A user identifier
cid:
type: number
description: A category identifier
title:
type: string
slug:
type: string
timestamp:
type: number
lastposttime:
type: number
postcount:
type: number
viewcount:
type: number
pinned:
type: number
description: Whether or not this particular topic is pinned to the top of the
category
thumb:
type: string
mainPid:
type: number
description: The post id of the first post in this topic (also called the
"original post")
teaserPid:
oneOf:
- type: number
- type: string
upvotes:
type: number
downvotes:
type: number
deleted:
type: number
locked:
type: number
titleRaw:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
lastposttimeISO:
type: string
votes:
type: number
category:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
slug:
type: string
icon:
type: string
image:
nullable: true
imageClass:
nullable: true
bgColor:
type: string
color:
type: string
disabled:
type: number
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
fullname:
type: string
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
reputation:
type: number
postcount:
type: number
picture:
nullable: true
type: string
signature:
nullable: true
type: string
banned:
type: number
status:
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
banned_until_readable:
type: string
teaser:
type: object
properties:
pid:
type: number
uid:
type: number
description: A user identifier
timestamp:
type: number
tid:
type: number
description: A topic identifier
content:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users
without an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's
auto-generated icon
example: "#f44336"
index:
type: number
tags:
type: array
items:
type: object
properties:
value:
type: string
valueEscaped:
type: string
color:
type: string
bgColor:
type: string
score:
type: number
isOwner:
type: boolean
ignored:
type: boolean
unread:
type: boolean
bookmark:
nullable: true
unreplied:
type: boolean
icons:
type: array
items: {}
index:
type: number
tids:
type: array
items:
type: number
canPost:
type: boolean
categories:
type: array
items:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
level:
type: string
icon:
type: string
parentCid:
type: number
description: The category identifier for the category that is the immediate
ancestor of the current category
color:
type: string
bgColor:
type: string
selected:
type: boolean
imageClass:
type: string
allCategoriesUrl:
type: string
selectedCids:
type: array
items: {}
feeds:disableRSS:
type: number
rssFeedUrl:
type: string
title:
type: string
filters:
type: array
items:
type: object
properties:
name:
type: string
url:
type: string
selected:
type: boolean
filter:
type: string
selectedFilter:
type: object
properties:
name:
type: string
url:
type: string
selected:
type: boolean
filter:
type: string
terms:
type: array
items:
type: object
properties:
name:
type: string
url:
type: string
selected:
type: boolean
term:
type: string
selectedTerm:
type: object
properties:
name:
type: string
url:
type: string
selected:
type: boolean
term:
type: string
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/recent:
get:
tags:
- topics
summary: Recent Topics
description: Returns a list of topics sorted by timestamp.
responses:
"200":
description: An array of topic objects sorted by timestamp.
content:
application/json:
schema:
allOf:
- type: object
properties:
nextStart:
type: number
topicCount:
type: number
topics:
type: array
items:
type: object
properties:
tid:
type: number
description: A topic identifier
uid:
type: number
description: A user identifier
cid:
type: number
description: A category identifier
mainPid:
type: number
description: The post id of the first post in this topic (also called the
"original post")
title:
type: string
slug:
type: string
timestamp:
type: number
lastposttime:
type: number
postcount:
type: number
viewcount:
type: number
teaserPid:
type: number
upvotes:
type: number
downvotes:
type: number
deleted:
type: number
locked:
type: number
pinned:
type: number
description: Whether or not this particular topic is pinned to the top of the
category
titleRaw:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
lastposttimeISO:
type: string
votes:
type: number
category:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
slug:
type: string
icon:
type: string
image:
nullable: true
imageClass:
nullable: true
type: string
bgColor:
type: string
color:
type: string
disabled:
type: number
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
fullname:
type: string
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
reputation:
type: number
postcount:
type: number
picture:
nullable: true
type: string
signature:
nullable: true
type: string
banned:
type: number
status:
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
banned_until_readable:
type: string
teaser:
type: object
properties:
pid:
type: number
uid:
type: number
description: A user identifier
timestamp:
type: number
tid:
type: number
description: A topic identifier
content:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users
without an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's
auto-generated icon
example: "#f44336"
index:
type: number
tags:
type: array
items:
type: object
properties:
value:
type: string
valueEscaped:
type: string
color:
type: string
bgColor:
type: string
score:
type: number
isOwner:
type: boolean
ignored:
type: boolean
unread:
type: boolean
bookmark:
nullable: true
unreplied:
type: boolean
icons:
type: array
items: {}
index:
type: number
thumb:
type: string
isQuestion:
nullable: true
tids:
type: array
items:
type: number
canPost:
type: boolean
categories:
type: array
items:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
level:
type: string
icon:
type: string
parentCid:
type: number
description: The category identifier for the category that is the immediate
ancestor of the current category
color:
type: string
bgColor:
type: string
selected:
type: boolean
imageClass:
type: string
allCategoriesUrl:
type: string
selectedCids:
type: array
items: {}
feeds:disableRSS:
type: number
rssFeedUrl:
type: string
title:
type: string
filters:
type: array
items:
type: object
properties:
name:
type: string
url:
type: string
selected:
type: boolean
filter:
type: string
selectedFilter:
type: object
properties:
name:
type: string
url:
type: string
selected:
type: boolean
filter:
type: string
terms:
type: array
items:
type: object
properties:
name:
type: string
url:
type: string
selected:
type: boolean
term:
type: string
selectedTerm:
type: object
properties:
name:
type: string
url:
type: string
selected:
type: boolean
term:
type: string
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/top:
get:
tags:
- topics
summary: Top Topics
description: Returns a list of topics sorted by most upvotes.
responses:
"200":
description: An array of topic objects sorted by most upvotes.
content:
application/json:
schema:
allOf:
- type: object
properties:
nextStart:
type: number
topicCount:
type: number
topics:
type: array
items:
type: object
properties:
tid:
type: number
description: A topic identifier
uid:
type: number
description: A user identifier
cid:
type: number
description: A category identifier
mainPid:
type: number
description: The post id of the first post in this topic (also called the
"original post")
title:
type: string
slug:
type: string
timestamp:
type: number
lastposttime:
type: number
postcount:
type: number
viewcount:
type: number
teaserPid:
type: string
upvotes:
type: number
downvotes:
type: number
deleted:
type: number
locked:
type: number
pinned:
type: number
description: Whether or not this particular topic is pinned to the top of the
category
titleRaw:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
lastposttimeISO:
type: string
votes:
type: number
category:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
slug:
type: string
icon:
type: string
image:
nullable: true
imageClass:
nullable: true
bgColor:
type: string
color:
type: string
disabled:
type: number
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
reputation:
type: number
postcount:
type: number
picture:
nullable: true
type: string
signature:
nullable: true
type: string
banned:
type: number
status:
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
banned_until_readable:
type: string
fullname:
type: string
teaser:
type: object
properties:
pid:
type: number
uid:
type: number
description: A user identifier
timestamp:
type: number
tid:
type: number
description: A topic identifier
content:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users
without an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's
auto-generated icon
example: "#f44336"
index:
type: number
tags:
type: array
items:
type: object
properties:
value:
type: string
valueEscaped:
type: string
color:
type: string
bgColor:
type: string
score:
type: number
isOwner:
type: boolean
ignored:
type: boolean
unread:
type: boolean
bookmark:
nullable: true
unreplied:
type: boolean
icons:
type: array
items: {}
index:
type: number
thumb:
type: string
tids:
type: array
items:
type: number
canPost:
type: boolean
categories:
type: array
items:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
level:
type: string
icon:
type: string
parentCid:
type: number
description: The category identifier for the category that is the immediate
ancestor of the current category
color:
type: string
bgColor:
type: string
selected:
type: boolean
imageClass:
type: string
allCategoriesUrl:
type: string
selectedCategory:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
level:
type: string
icon:
type: string
parentCid:
type: number
description: The category identifier for the category that is the immediate
ancestor of the current category
color:
type: string
bgColor:
type: string
selected:
type: boolean
selectedCids:
type: array
items:
type: number
feeds:disableRSS:
type: number
rssFeedUrl:
type: string
title:
type: string
filters:
type: array
items:
type: object
properties:
name:
type: string
url:
type: string
selected:
type: boolean
filter:
type: string
selectedFilter:
type: object
properties:
name:
type: string
url:
type: string
selected:
type: boolean
filter:
type: string
terms:
type: array
items:
type: object
properties:
name:
type: string
url:
type: string
selected:
type: boolean
term:
type: string
selectedTerm:
type: object
properties:
name:
type: string
url:
type: string
selected:
type: boolean
term:
type: string
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/unread:
get:
tags:
- topics
summary: Unread Topics
description: Returns a list of the current user's unread topics, sorted by the
last post's timestamp.
responses:
"200":
description: An array of unread topic objects sorted by the last post's timestamp.
content:
application/json:
schema:
allOf:
- type: object
properties:
showSelect:
type: boolean
nextStart:
type: number
topics:
type: array
items:
type: object
properties:
tid:
type: number
description: A topic identifier
uid:
type: number
description: A user identifier
cid:
type: number
description: A category identifier
mainPid:
type: number
description: The post id of the first post in this topic (also called the
"original post")
title:
type: string
slug:
type: string
timestamp:
type: number
lastposttime:
type: number
postcount:
type: number
viewcount:
type: number
teaserPid:
type: number
upvotes:
type: number
downvotes:
type: number
deleted:
type: number
locked:
type: number
pinned:
type: number
description: Whether or not this particular topic is pinned to the top of the
category
titleRaw:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
lastposttimeISO:
type: string
votes:
type: number
category:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
slug:
type: string
icon:
type: string
image:
nullable: true
imageClass:
nullable: true
type: string
bgColor:
type: string
color:
type: string
disabled:
type: number
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
fullname:
type: string
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
reputation:
type: number
postcount:
type: number
picture:
nullable: true
type: string
signature:
nullable: true
type: string
banned:
type: number
status:
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
banned_until_readable:
type: string
teaser:
type: object
properties:
pid:
type: number
uid:
type: number
description: A user identifier
timestamp:
type: number
tid:
type: number
description: A topic identifier
content:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users
without an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's
auto-generated icon
example: "#f44336"
index:
type: number
tags:
type: array
items:
type: object
properties:
value:
type: string
valueEscaped:
type: string
color:
type: string
bgColor:
type: string
score:
type: number
isOwner:
type: boolean
ignored:
type: boolean
unread:
type: boolean
bookmark:
nullable: true
unreplied:
type: boolean
icons:
type: array
items: {}
index:
type: number
isQuestion:
nullable: true
topicCount:
type: number
title:
type: string
pageCount:
type: number
categories:
type: array
items:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
level:
type: string
icon:
type: string
parentCid:
type: number
description: The category identifier for the category that is the immediate
ancestor of the current category
color:
type: string
bgColor:
type: string
selected:
type: boolean
imageClass:
type: string
allCategoriesUrl:
type: string
selectedCids:
type: array
items: {}
filters:
type: array
items:
type: object
properties:
name:
type: string
url:
type: string
selected:
type: boolean
filter:
type: string
selectedFilter:
type: object
properties:
name:
type: string
url:
type: string
selected:
type: boolean
filter:
type: string
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/category/{category_id}/{slug}/{topic_index}":
get:
tags:
- categories
summary: /api/category/{category_id}/{slug}/{topic_index}
parameters:
- name: category_id
in: path
required: true
schema:
type: string
- name: slug
in: path
required: true
schema:
type: string
- name: topic_index
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/CategoryObject.yaml#/CategoryObject
- type: object
properties:
tagWhitelist:
type: array
items: {}
unread-class:
type: string
children:
type: array
items:
$ref: components/schemas/CategoryObject.yaml#/CategoryObject
topics:
type: array
items:
type: object
properties:
tid:
type: number
description: A topic identifier
uid:
type: number
description: A user identifier
cid:
type: number
description: A category identifier
title:
type: string
slug:
type: string
timestamp:
type: number
lastposttime:
type: number
postcount:
type: number
viewcount:
type: number
thumb:
type: string
mainPid:
type: number
description: The post id of the first post in this topic (also called the
"original post")
upvotes:
type: number
downvotes:
type: number
deleted:
type: number
locked:
type: number
pinned:
type: number
description: Whether or not this particular topic is pinned to the top of the
category
titleRaw:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
lastposttimeISO:
type: string
votes:
type: number
category:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
slug:
type: string
icon:
type: string
image:
nullable: true
imageClass:
nullable: true
bgColor:
type: string
color:
type: string
disabled:
type: number
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
reputation:
type: number
postcount:
type: number
picture:
nullable: true
type: string
signature:
nullable: true
type: string
banned:
type: number
status:
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
banned_until_readable:
type: string
fullname:
type: string
teaser:
type: object
properties:
pid:
type: number
uid:
type: number
description: A user identifier
timestamp:
type: number
tid:
type: number
description: A topic identifier
content:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users
without an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's
auto-generated icon
example: "#f44336"
index:
type: number
tags:
type: array
items: {}
isOwner:
type: boolean
ignored:
type: boolean
unread:
type: boolean
bookmark:
nullable: true
unreplied:
type: boolean
icons:
type: array
items: {}
index:
type: number
teaserPid:
type: number
nextStart:
type: number
isWatched:
type: boolean
isNotWatched:
type: boolean
isIgnored:
type: boolean
title:
type: string
privileges:
type: object
properties:
topics:create:
type: boolean
topics:read:
type: boolean
topics:tag:
type: boolean
read:
type: boolean
cid:
type: string
uid:
type: number
description: A user identifier
editable:
type: boolean
view_deleted:
type: boolean
isAdminOrMod:
type: boolean
showSelect:
type: boolean
rssFeedUrl:
type: string
feeds:disableRSS:
type: number
reputation:disabled:
type: number
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/category/{category_id}/{slug?}":
get:
tags:
- categories
summary: /api/category/{category_id}/{slug?}
parameters:
- name: category_id
in: path
required: true
schema:
type: string
- name: slug?
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/CategoryObject.yaml#/CategoryObject
- type: object
properties:
tagWhitelist:
type: array
items: {}
unread-class:
type: string
children:
type: array
items:
$ref: components/schemas/CategoryObject.yaml#/CategoryObject
topics:
type: array
items:
type: object
properties:
tid:
type: number
description: A topic identifier
uid:
type: number
description: A user identifier
cid:
type: number
description: A category identifier
title:
type: string
slug:
type: string
timestamp:
type: number
lastposttime:
type: number
postcount:
type: number
viewcount:
type: number
pinned:
type: number
description: Whether or not this particular topic is pinned to the top of the
category
thumb:
type: string
mainPid:
type: number
description: The post id of the first post in this topic (also called the
"original post")
teaserPid:
type: number
upvotes:
type: number
downvotes:
type: number
deleted:
type: number
locked:
type: number
titleRaw:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
lastposttimeISO:
type: string
votes:
type: number
category:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
slug:
type: string
icon:
type: string
image:
nullable: true
imageClass:
nullable: true
bgColor:
type: string
color:
type: string
disabled:
type: number
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
fullname:
type: string
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
reputation:
type: number
postcount:
type: number
picture:
nullable: true
type: string
signature:
nullable: true
type: string
banned:
type: number
status:
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
banned_until_readable:
type: string
teaser:
type: object
properties:
pid:
type: number
uid:
type: number
description: A user identifier
timestamp:
type: number
tid:
type: number
description: A topic identifier
content:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users
without an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's
auto-generated icon
example: "#f44336"
index:
type: number
tags:
type: array
items:
type: object
properties:
value:
type: string
valueEscaped:
type: string
color:
type: string
bgColor:
type: string
score:
type: number
isOwner:
type: boolean
ignored:
type: boolean
unread:
type: boolean
bookmark:
nullable: true
unreplied:
type: boolean
icons:
type: array
items: {}
index:
type: number
isQuestion:
type: number
isSolved:
type: number
nextStart:
type: number
isWatched:
type: boolean
isNotWatched:
type: boolean
isIgnored:
type: boolean
title:
type: string
privileges:
type: object
properties:
topics:create:
type: boolean
topics:read:
type: boolean
topics:tag:
type: boolean
read:
type: boolean
cid:
type: string
uid:
type: number
description: A user identifier
editable:
type: boolean
view_deleted:
type: boolean
isAdminOrMod:
type: boolean
showSelect:
type: boolean
rssFeedUrl:
type: string
feeds:disableRSS:
type: number
reputation:disabled:
type: number
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/me/*:
get:
tags:
- shorthand
summary: Access your own profile's pages
description: >-
This shorthand is useful if you want to link to pages in your own account profile, but do not want (or have) the `userslug`. It is also especially useful as a
means to instruct users on how to do things, as you can easily redirect them to their own profile pages.
responses:
"200":
description: "Canonical URL to your requested profile page"
"/api/uid/{uid}/*":
get:
tags:
- shorthand
summary: Access a user's profile pages
description: >-
This particular shorthand is useful if you are looking to redirect to a user's profile (or other associated pages), but do not know or want to retrieve their userslug,
which is part of the canonical url.
For example, to go to `uid` 15's list of topics made, you can navigate to `/api/uid/15/topics`, which will send you to the appropriate canonical URL for that user's topics.
parameters:
- name: uid
in: path
required: true
schema:
type: string
responses:
"200":
description: "Canonical URL of user profile page"
"/api/user/{userslug}":
get:
tags:
- users
summary: Get user profile
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
posts:
$ref: components/schemas/PostsObject.yaml#/PostsObject
latestPosts:
$ref: components/schemas/PostsObject.yaml#/PostsObject
bestPosts:
$ref: components/schemas/PostsObject.yaml#/PostsObject
hasPrivateChat:
type: number
title:
type: string
allowCoverPicture:
type: boolean
selectedGroup:
type: array
items:
type: object
properties:
name:
type: string
slug:
type: string
createtime:
type: number
userTitle:
type: string
description:
type: string
memberCount:
type: number
deleted:
type: string
hidden:
type: number
system:
type: number
private:
type: number
ownerUid:
type: number
icon:
type: string
labelColor:
type: string
cover:url:
type: string
cover:position:
type: string
userTitleEnabled:
type: number
disableJoinRequests:
type: number
disableLeave:
type: number
nameEncoded:
type: string
displayName:
type: string
textColor:
type: string
createtimeISO:
type: string
cover:thumb:url:
type: string
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/following":
get:
tags:
- users
summary: Get followed users
parameters:
- name: userslug
in: path
required: true
schema:
type: string
- name: page
in: query
schema:
type: number
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
title:
type: string
users:
type: array
items:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
status:
type: string
postcount:
type: number
reputation:
type: number
email:confirmed:
type: number
description: Whether the user has confirmed their email address or not
lastonline:
type: number
flags:
nullable: true
banned:
type: number
banned:expire:
type: number
joindate:
type: number
description: A UNIX timestamp representing the moment the user's account was
created
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without an
avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with `icon:text`
for the user's auto-generated icon
example: "#f44336"
joindateISO:
type: string
lastonlineISO:
type: string
banned_until:
type: number
banned_until_readable:
type: string
administrator:
type: boolean
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/followers":
get:
tags:
- users
summary: Get followers
parameters:
- name: userslug
in: path
required: true
schema:
type: string
- name: page
in: query
schema:
type: number
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
title:
type: string
users:
type: array
items:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
status:
type: string
postcount:
type: number
reputation:
type: number
email:confirmed:
type: number
description: Whether the user has confirmed their email address or not
lastonline:
type: number
flags:
nullable: true
banned:
type: number
banned:expire:
type: number
joindate:
type: number
description: A UNIX timestamp representing the moment the user's account was
created
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without an
avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with `icon:text`
for the user's auto-generated icon
example: "#f44336"
joindateISO:
type: string
lastonlineISO:
type: string
banned_until:
type: number
banned_until_readable:
type: string
administrator:
type: boolean
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/categories":
get:
tags:
- users
summary: /api/user/{userslug}/categories
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
categories:
type: array
items:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
level:
type: string
icon:
type: string
parentCid:
type: number
description: The category identifier for the category that is the immediate
ancestor of the current category
color:
type: string
bgColor:
type: string
descriptionParsed:
type: string
depth:
type: number
slug:
type: string
isIgnored:
type: boolean
isWatched:
type: boolean
isNotWatched:
type: boolean
imageClass:
type: string
title:
type: string
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/posts":
get:
tags:
- users
summary: /api/user/{userslug}/posts
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
posts:
type: array
items: {}
nextStart:
type: number
noItemsFoundKey:
type: string
title:
type: string
showSort:
type: boolean
sortOptions:
type: array
items:
type: object
properties:
url:
type: string
name:
type: string
selected:
type: boolean
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/topics":
get:
tags:
- users
summary: /api/user/{userslug}/topics
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObject
- type: object
properties:
age:
type: number
emailClass:
type: string
moderationNote:
type: string
isBlocked:
type: boolean
yourid:
type: number
theirid:
type: number
isTargetAdmin:
type: boolean
isAdmin:
type: boolean
isGlobalModerator:
type: boolean
isModerator:
type: boolean
isAdminOrGlobalModerator:
type: boolean
isAdminOrGlobalModeratorOrModerator:
type: boolean
isSelfOrAdminOrGlobalModerator:
type: boolean
canEdit:
type: boolean
canBan:
type: boolean
canChangePassword:
type: boolean
isSelf:
type: boolean
isFollowing:
type: boolean
showHidden:
type: boolean
groups:
type: array
items: {}
disableSignatures:
type: boolean
reputation:disabled:
type: boolean
downvote:disabled:
type: boolean
profile_links:
type: array
items: {}
sso:
type: array
items:
type: object
properties:
associated:
type: boolean
url:
type: string
name:
type: string
icon:
type: string
websiteLink:
type: string
websiteName:
type: string
username:disableEdit:
type: number
email:disableEdit:
type: number
topics:
type: array
items:
type: object
properties:
tid:
type: number
description: A topic identifier
uid:
type: number
description: A user identifier
cid:
type: number
description: A category identifier
title:
type: string
slug:
type: string
timestamp:
type: number
lastposttime:
type: number
postcount:
type: number
viewcount:
type: number
thumb:
type: string
mainPid:
type: number
description: The post id of the first post in this topic (also called the
"original post")
teaserPid:
type: number
upvotes:
type: number
downvotes:
type: number
deleted:
type: number
locked:
type: number
pinned:
type: number
description: Whether or not this particular topic is pinned to the top of the
category
titleRaw:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
lastposttimeISO:
type: string
votes:
type: number
category:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
slug:
type: string
icon:
type: string
image:
nullable: true
imageClass:
nullable: true
bgColor:
type: string
color:
type: string
disabled:
type: number
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
reputation:
type: number
postcount:
type: number
picture:
nullable: true
signature:
type: string
banned:
type: number
status:
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
banned_until_readable:
type: string
teaser:
type: object
properties:
pid:
type: number
uid:
type: number
description: A user identifier
timestamp:
type: number
tid:
type: number
description: A topic identifier
content:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users
without an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's
auto-generated icon
example: "#f44336"
index:
type: number
tags:
type: array
items: {}
isOwner:
type: boolean
ignored:
type: boolean
unread:
type: boolean
bookmark:
nullable: true
unreplied:
type: boolean
icons:
type: array
items: {}
index:
type: number
nextStart:
type: number
noItemsFoundKey:
type: string
title:
type: string
showSort:
type: boolean
sortOptions:
type: array
items:
type: object
properties:
url:
type: string
name:
type: string
selected:
type: boolean
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/best":
get:
tags:
- users
summary: /api/user/{userslug}/best
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
posts:
$ref: components/schemas/PostsObject.yaml#/PostsObject
nextStart:
type: number
noItemsFoundKey:
type: string
title:
type: string
showSort:
type: boolean
sortOptions:
type: array
items:
type: object
properties:
url:
type: string
name:
type: string
selected:
type: boolean
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/groups":
get:
tags:
- users
summary: /api/user/{userslug}/groups
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
title:
type: string
template:
type: object
properties:
name:
type: string
account/groups:
type: boolean
"304":
description: ""
"/api/user/{userslug}/bookmarks":
get:
tags:
- users
summary: /api/user/{userslug}/bookmarks
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObject
- type: object
properties:
age:
type: number
emailClass:
type: string
ips:
type: array
items:
type: string
moderationNote:
type: string
isBlocked:
type: boolean
blocksCount:
type: number
yourid:
type: number
theirid:
type: number
isTargetAdmin:
type: boolean
isAdmin:
type: boolean
isGlobalModerator:
type: boolean
isModerator:
type: boolean
isAdminOrGlobalModerator:
type: boolean
isAdminOrGlobalModeratorOrModerator:
type: boolean
isSelfOrAdminOrGlobalModerator:
type: boolean
canEdit:
type: boolean
canBan:
type: boolean
canChangePassword:
type: boolean
isSelf:
type: boolean
isFollowing:
type: boolean
showHidden:
type: boolean
groups:
type: array
items: {}
disableSignatures:
type: boolean
reputation:disabled:
type: boolean
downvote:disabled:
type: boolean
profile_links:
type: array
items:
type: object
properties:
id:
type: string
route:
type: string
name:
type: string
visibility:
type: object
properties:
self:
type: boolean
other:
type: boolean
moderator:
type: boolean
globalMod:
type: boolean
admin:
type: boolean
canViewInfo:
type: boolean
public:
type: boolean
icon:
type: string
sso:
type: array
items:
type: object
properties:
associated:
type: boolean
url:
type: string
name:
type: string
icon:
type: string
websiteLink:
type: string
websiteName:
type: string
username:disableEdit:
type: number
email:disableEdit:
type: number
posts:
type: array
items: {}
nextStart:
type: number
noItemsFoundKey:
type: string
title:
type: string
showSort:
type: boolean
sortOptions:
type: array
items:
type: object
properties:
url:
type: string
name:
type: string
selected:
type: boolean
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/watched":
get:
tags:
- users
summary: /api/user/{userslug}/watched
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObject
- type: object
properties:
aboutmeParsed:
type: string
age:
type: number
emailClass:
type: string
ips:
type: array
items:
type: string
isBlocked:
type: boolean
blocksCount:
type: number
yourid:
type: number
theirid:
type: number
isTargetAdmin:
type: boolean
isAdmin:
type: boolean
isGlobalModerator:
type: boolean
isModerator:
type: boolean
isAdminOrGlobalModerator:
type: boolean
isAdminOrGlobalModeratorOrModerator:
type: boolean
isSelfOrAdminOrGlobalModerator:
type: boolean
canEdit:
type: boolean
canBan:
type: boolean
canChangePassword:
type: boolean
isSelf:
type: boolean
isFollowing:
type: boolean
hasPrivateChat:
type: number
showHidden:
type: boolean
groups:
type: array
items:
type: object
properties:
name:
type: string
slug:
type: string
createtime:
type: number
userTitle:
type: string
description:
type: string
memberCount:
type: number
deleted:
oneOf:
- type: string
- type: number
hidden:
type: number
system:
type: number
private:
type: number
ownerUid:
type: number
icon:
type: string
labelColor:
type: string
userTitleEnabled:
type: number
disableJoinRequests:
type: number
disableLeave:
type: number
nameEncoded:
type: string
displayName:
type: string
textColor:
type: string
createtimeISO:
type: string
cover:thumb:url:
type: string
cover:url:
type: string
cover:position:
type: string
disableSignatures:
type: boolean
reputation:disabled:
type: boolean
downvote:disabled:
type: boolean
profile_links:
type: array
items:
type: object
properties:
id:
type: string
route:
type: string
name:
type: string
visibility:
type: object
properties:
self:
type: boolean
other:
type: boolean
moderator:
type: boolean
globalMod:
type: boolean
admin:
type: boolean
canViewInfo:
type: boolean
public:
type: boolean
icon:
type: string
sso:
type: array
items:
type: object
properties:
associated:
type: boolean
url:
type: string
deauthUrl:
type: string
name:
type: string
icon:
type: string
websiteLink:
type: string
websiteName:
type: string
moderationNote:
type: string
username:disableEdit:
type: boolean
email:disableEdit:
type: boolean
topics:
type: array
items:
type: object
properties:
tid:
type: number
description: A topic identifier
uid:
type: number
description: A user identifier
cid:
type: number
description: A category identifier
mainPid:
type: number
description: The post id of the first post in this topic (also called the
"original post")
title:
type: string
slug:
type: string
timestamp:
type: number
lastposttime:
type: number
postcount:
type: number
viewcount:
type: number
teaserPid:
oneOf:
- type: number
- type: string
upvotes:
type: number
downvotes:
type: number
deleted:
type: number
locked:
type: number
pinned:
type: number
description: Whether or not this particular topic is pinned to the top of the
category
deleterUid:
type: number
titleRaw:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
lastposttimeISO:
type: string
votes:
type: number
category:
type: object
properties:
cid:
type: number
description: A category identifier
name:
type: string
slug:
type: string
icon:
type: string
image:
nullable: true
type: string
imageClass:
nullable: true
type: string
bgColor:
type: string
color:
type: string
disabled:
type: number
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
reputation:
type: number
postcount:
type: number
picture:
type: string
signature:
nullable: true
type: string
banned:
type: number
status:
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
banned_until_readable:
type: string
fullname:
type: string
teaser:
type: object
properties:
pid:
type: number
uid:
type: number
description: A user identifier
timestamp:
type: number
tid:
type: number
description: A topic identifier
content:
type: string
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users
without an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's
auto-generated icon
example: "#f44336"
index:
type: number
tags:
type: array
items:
type: object
properties:
value:
type: string
valueEscaped:
type: string
color:
type: string
bgColor:
type: string
score:
type: number
isOwner:
type: boolean
ignored:
type: boolean
unread:
type: boolean
bookmark:
nullable: true
type: number
unreplied:
type: boolean
icons:
type: array
items: {}
index:
type: number
thumb:
type: string
isQuestion:
type: number
isSolved:
type: number
nextStart:
type: number
noItemsFoundKey:
type: string
title:
type: string
showSort:
type: boolean
sortOptions:
type: array
items:
type: object
properties:
url:
type: string
name:
type: string
selected:
type: boolean
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/ignored":
get:
tags:
- users
summary: /api/user/{userslug}/ignored
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
topics:
type: array
items: {}
nextStart:
type: number
noItemsFoundKey:
type: string
title:
type: string
showSort:
type: boolean
sortOptions:
type: array
items:
type: object
properties:
url:
type: string
name:
type: string
selected:
type: boolean
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/upvoted":
get:
tags:
- users
summary: /api/user/{userslug}/upvoted
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
posts:
$ref: components/schemas/PostsObject.yaml#/PostsObject
nextStart:
type: number
noItemsFoundKey:
type: string
description: Translation key for message notifying user that there were no posts found
title:
type: string
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/downvoted":
get:
tags:
- users
summary: Get user's downvotes
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
posts:
$ref: components/schemas/PostsObject.yaml#/PostsObject
nextStart:
type: number
noItemsFoundKey:
type: string
description: Translation key for message notifying user that there were no posts found
title:
type: string
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/edit":
get:
tags:
- users
summary: /api/user/{userslug}/edit
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
maximumSignatureLength:
type: number
maximumAboutMeLength:
type: number
maximumProfileImageSize:
type: number
allowProfilePicture:
type: boolean
allowCoverPicture:
type: boolean
allowProfileImageUploads:
type: number
allowedProfileImageExtensios:
type: string
allowMultipleBadges:
type: boolean
allowAccountDelete:
type: boolean
allowWebsite:
type: boolean
allowAboutMe:
type: boolean
allowSignature:
type: boolean
profileImageDimension:
type: number
defaultAvatar:
type: string
groupSelectSize:
type: number
title:
type: string
editButtons:
type: array
items: {}
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/edit/username":
get:
tags:
- users
summary: /api/user/{userslug}/edit/username
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
hasPassword:
type: boolean
title:
type: string
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/edit/email":
get:
tags:
- users
summary: /api/user/{userslug}/edit/email
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
hasPassword:
type: boolean
title:
type: string
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/edit/password":
get:
tags:
- users
summary: /api/user/{userslug}/edit/password
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
hasPassword:
type: boolean
minimumPasswordLength:
type: number
minimumPasswordStrength:
type: number
title:
type: string
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/info":
get:
tags:
- users
summary: /api/user/{userslug}/info
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
history:
type: object
properties:
flags:
type: array
items:
type: object
properties:
pid:
type: number
timestamp:
type: number
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
timestampReadable:
type: string
title:
type: string
titleRaw:
type: string
bans:
type: array
items: {}
sessions:
type: array
items:
type: object
properties:
ip:
type: string
uuid:
type: string
datetime:
type: number
platform:
type: string
browser:
type: string
version:
type: string
current:
type: boolean
datetimeISO:
type: string
usernames:
type: array
items:
type: object
properties:
value:
type: string
timestamp:
type: number
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
emails:
type: array
items:
type: object
properties:
value:
type: string
timestamp:
type: number
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
moderationNotes:
type: array
items: {}
title:
type: string
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/settings":
get:
tags:
- users
summary: /api/user/{userslug}/settings
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
settings:
type: object
properties:
showemail:
type: boolean
usePagination:
type: boolean
topicsPerPage:
type: number
postsPerPage:
type: number
notificationSounds:
type: number
topicPostSort:
type: string
openOutgoingLinksInNewTab:
type: boolean
dailyDigestFreq:
type: string
language:
type: string
showfullname:
type: boolean
followTopicsOnCreate:
type: boolean
followTopicsOnReply:
type: boolean
restrictChat:
type: boolean
topicSearchEnabled:
type: boolean
categoryTopicSort:
type: string
userLang:
type: string
groupTitle:
nullable: true
pushbullet:enabled:
type: number
pushbullet:target:
type: string
bootswatchSkin:
type: string
homePageRoute:
type: string
scrollToMyPost:
type: boolean
delayImageLoading:
type: number
notificationSound:
type: string
incomingChatSound:
type: string
outgoingChatSound:
type: string
notificationType_new-chat:
type: string
notificationType_new-reply:
type: string
sendChatNotifications:
nullable: true
sendPostNotifications:
nullable: true
notificationType_upvote:
type: string
notificationType_new-topic:
type: string
notificationType_follow:
type: string
notificationType_group-invite:
type: string
upvoteNotifFreq:
type: string
notificationType_mention:
type: string
acpLang:
type: string
notificationType_new-register:
type: string
notificationType_post-queue:
type: string
notificationType_new-post-flag:
type: string
notificationType_new-user-flag:
type: string
categoryWatchState:
type: string
notificationType_group-request-membership:
type: string
uid:
type: number
description: A user identifier
languages:
type: array
items:
type: object
properties:
name:
type: string
code:
type: string
dir:
type: string
selected:
type: boolean
acpLanguages:
type: array
items:
type: object
properties:
name:
type: string
code:
type: string
dir:
type: string
selected:
type: boolean
notification-sound:
type: array
items:
type: object
properties:
name:
type: string
sounds:
type: array
items:
type: object
properties:
name:
type: string
value:
type: string
selected:
type: boolean
notificationSound:
type: array
items:
type: object
properties:
name:
type: string
selected:
type: boolean
chat-incoming-sound:
type: array
items:
type: object
properties:
name:
type: string
sounds:
type: array
items:
type: object
properties:
name:
type: string
value:
type: string
selected:
type: boolean
incomingChatSound:
type: array
items:
type: object
properties:
name:
type: string
selected:
type: boolean
chat-outgoing-sound:
type: array
items:
type: object
properties:
name:
type: string
sounds:
type: array
items:
type: object
properties:
name:
type: string
value:
type: string
selected:
type: boolean
outgoingChatSound:
type: array
items:
type: object
properties:
name:
type: string
selected:
type: boolean
customSettings:
type: array
items: {}
homePageRoutes:
type: array
items:
type: object
properties:
route:
type: string
name:
type: string
selected:
type: boolean
notificationSettings:
type: array
items:
type: object
properties:
name:
type: string
label:
type: string
none:
type: boolean
notification:
type: boolean
email:
type: boolean
notificationemail:
type: boolean
disableEmailSubscriptions:
type: number
dailyDigestFreqOptions:
type: array
items:
type: object
properties:
value:
type: string
name:
type: string
selected:
type: boolean
bootswatchSkinOptions:
type: array
items:
type: object
properties:
name:
type: string
value:
type: string
selected:
type: boolean
upvoteNotifFreq:
type: array
items:
type: object
properties:
name:
type: string
selected:
type: boolean
categoryWatchState:
type: object
properties:
watching:
type: boolean
disableCustomUserSkins:
type: number
allowUserHomePage:
type: number
hideFullname:
type: number
hideEmail:
type: number
inTopicSearchAvailable:
type: boolean
maxTopicsPerPage:
type: number
maxPostsPerPage:
type: number
title:
type: string
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/uploads":
get:
tags:
- users
summary: /api/user/{userslug}/uploads
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
uploads:
type: array
items: {}
privateUploads:
type: boolean
title:
type: string
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/consent":
get:
tags:
- users
summary: /api/user/{userslug}/consent
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
gdpr_consent:
type: boolean
digest:
type: object
properties:
frequency:
type: string
enabled:
type: boolean
title:
type: string
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/blocks":
get:
tags:
- users
summary: /api/user/{userslug}/blocks
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
users:
type: array
items: {}
title:
type: string
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/sessions":
get:
tags:
- users
summary: /api/user/{userslug}/sessions
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- $ref: components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
sessions:
type: array
items: {}
title:
type: string
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/session/{uuid}":
delete:
tags:
- users
summary: Revoke a user session
parameters:
- name: userslug
in: path
required: true
schema:
type: string
- name: uuid
in: path
required: true
schema:
type: string
responses:
"200":
description: User session revoked
/api/notifications:
get:
tags:
- notifications
summary: /api/notifications
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
notifications:
type: array
items:
type: object
properties:
type:
type: string
bodyShort:
type: string
bodyLong:
type: string
pid:
oneOf:
- type: number
- type: string
tid:
type: number
description: A topic identifier
path:
type: string
nid:
type: string
from:
type: number
mergeId:
type: string
topicTitle:
type: string
importance:
type: number
datetime:
type: number
datetimeISO:
type: string
user:
type: object
properties:
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
type: string
uid:
type: number
description: A user identifier
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
image:
type: string
read:
type: boolean
readClass:
type: string
subject:
type: string
filters:
type: array
items:
type: object
properties:
name:
type: string
filter:
type: string
selected:
type: boolean
regularFilters:
type: array
items:
type: object
properties:
name:
type: string
filter:
type: string
selected:
type: boolean
moderatorFilters:
type: array
items:
type: object
properties:
name:
type: string
filter:
type: string
selectedFilter:
type: object
properties:
name:
type: string
filter:
type: string
selected:
type: boolean
title:
type: string
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/user/{userslug}/chats/{roomid?}":
get:
tags:
- users
summary: /api/user/{userslug}/chats/{roomid?}
parameters:
- name: userslug
in: path
required: true
schema:
type: string
- name: roomid?
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
owner:
type: number
roomId:
type: number
roomName:
type: string
messages:
type: array
items:
type: object
properties:
content:
type: string
timestamp:
type: number
fromuid:
type: number
roomId:
type: string
deleted:
type: boolean
system:
type: boolean
edited:
type: number
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
editedISO:
type: string
messageId:
type: number
fromUser:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
type: string
status:
type: string
banned:
type: boolean
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
banned_until_readable:
type: string
deleted:
type: boolean
self:
type: number
newSet:
type: boolean
index:
type: number
cleanedContent:
type: string
isOwner:
type: boolean
users:
type: array
items:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
picture:
type: string
status:
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without an
avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with `icon:text`
for the user's auto-generated icon
example: "#f44336"
isOwner:
type: boolean
canReply:
type: boolean
groupChat:
type: boolean
usernames:
type: string
maximumUsersInChatRoom:
type: number
maximumChatMessageLength:
type: number
showUserInput:
type: boolean
isAdminOrGlobalMod:
type: boolean
rooms:
type: array
items:
type: object
properties:
owner:
oneOf:
- type: number
- type: string
roomId:
type: number
roomName:
type: string
users:
type: array
items:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
status:
type: string
lastonline:
type: number
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
lastonlineISO:
type: string
groupChat:
type: boolean
unread:
type: boolean
teaser:
type: object
properties:
fromuid:
type: number
content:
type: string
timestamp:
type: number
timestampISO:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
user:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
status:
type: string
lastonline:
type: number
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users
without an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's
auto-generated icon
example: "#f44336"
lastonlineISO:
type: string
lastUser:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
status:
type: string
lastonline:
type: number
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
lastonlineISO:
type: string
usernames:
type: string
nextStart:
type: number
title:
type: string
uid:
type: number
description: A user identifier
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
canViewInfo:
type: boolean
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/chats/{roomid?}":
get:
tags:
- shorthand
summary: /api/chats/{roomid?}
parameters:
- name: roomid?
in: path
required: true
schema:
type: string
responses:
"200":
description: "Chat identifier resolved"
content:
text/plain:
schema:
type: string
description: A relative path to the canonical URL for that chat page
/api/users:
get:
tags:
- users
summary: /api/users
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
users:
type: array
items:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
nullable: true
type: string
status:
type: string
postcount:
type: number
reputation:
type: number
email:confirmed:
type: number
description: Whether the user has confirmed their email address or not
lastonline:
type: number
flags:
nullable: true
banned:
type: number
banned:expire:
type: number
joindate:
type: number
description: A UNIX timestamp representing the moment the user's account was
created
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without an
avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with `icon:text`
for the user's auto-generated icon
example: "#f44336"
joindateISO:
type: string
lastonlineISO:
type: string
banned_until:
type: number
banned_until_readable:
type: string
administrator:
type: boolean
userCount:
type: number
title:
type: string
isAdminOrGlobalMod:
type: boolean
isAdmin:
type: boolean
isGlobalMod:
type: boolean
displayUserSearch:
type: boolean
section_joindate:
type: boolean
maximumInvites:
type: number
inviteOnly:
type: boolean
adminInviteOnly:
type: boolean
invites:
type: number
showInviteButton:
type: boolean
reputation:disabled:
type: number
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/groups:
get:
tags:
- groups
summary: /api/groups
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
groups:
type: array
items:
type: object
properties:
name:
type: string
description:
type: string
deleted:
oneOf:
- type: number
- type: string
hidden:
type: number
system:
type: number
userTitle:
type: string
icon:
type: string
labelColor:
type: string
createtime:
type: number
slug:
type: string
memberCount:
type: number
private:
type: number
userTitleEnabled:
type: number
disableJoinRequests:
type: number
disableLeave:
type: number
nameEncoded:
type: string
displayName:
type: string
textColor:
type: string
createtimeISO:
type: string
cover:thumb:url:
type: string
cover:url:
type: string
cover:position:
type: string
members:
type: array
items:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
picture:
nullable: true
type: string
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
truncated:
type: boolean
ownerUid:
type: number
allowGroupCreation:
type: boolean
nextStart:
type: number
title:
type: string
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/groups/{slug}":
get:
tags:
- groups
summary: /api/groups/{slug}
parameters:
- name: slug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
title:
type: string
group:
type: object
properties:
name:
type: string
description:
type: string
deleted:
type: number
hidden:
type: number
system:
type: number
userTitle:
type: string
icon:
type: string
labelColor:
type: string
slug:
type: string
createtime:
type: number
memberCount:
type: number
private:
type: number
cover:url:
type: string
cover:position:
type: string
userTitleEnabled:
type: number
disableJoinRequests:
type: number
disableLeave:
type: number
nameEncoded:
type: string
displayName:
type: string
textColor:
type: string
createtimeISO:
type: string
cover:thumb:url:
type: string
descriptionParsed:
type: string
members:
type: array
items:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
type: string
status:
type: string
postcount:
type: number
reputation:
type: number
email:confirmed:
type: number
description: Whether the user has confirmed their email address or not
lastonline:
type: number
flags:
nullable: true
type: number
banned:
type: number
banned:expire:
type: number
joindate:
type: number
description: A UNIX timestamp representing the moment the user's account was
created
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
joindateISO:
type: string
lastonlineISO:
type: string
banned_until:
type: number
banned_until_readable:
type: string
administrator:
type: boolean
isOwner:
type: boolean
membersNextStart:
type: number
pending:
type: array
items: {}
invited:
type: array
items: {}
isMember:
type: boolean
isPending:
type: boolean
isInvited:
type: boolean
isOwner:
type: boolean
posts:
$ref: components/schemas/PostsObject.yaml#/PostsObject
isAdmin:
type: boolean
isGlobalMod:
type: boolean
allowPrivateGroups:
type: number
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps
"/api/groups/{slug}/members":
get:
tags:
- groups
summary: Get user group members
parameters:
- name: userslug
in: path
required: true
schema:
type: string
responses:
"200":
description: ""
content:
application/json:
schema:
allOf:
- type: object
properties:
users:
type: array
- $ref: components/schemas/Pagination.yaml#/Pagination
- $ref: components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: components/schemas/CommonProps.yaml#/CommonProps