Discourse website screenshot

Discourse

At Discourse, our mission is to democratize online community and teamwork by raising the standard of civilized discourse on the Internet. We achieve this through delivering the best community and forum software. The Discourse API exposes administrative and content endpoints for categories, topics, posts, users, groups, tags, uploads, badges, and more.

1 APIs 0 Features
CommunitiesForumsOpen Source

APIs

Discourse API

The Discourse API exposes the full set of REST endpoints used to manage a Discourse forum, including categories, topics, posts, users, groups, tags, badges, uploads, search, sit...

Collections

Pricing Plans

Discourse Plans Pricing

3 plans

PLANS

Rate Limits

Discourse Rate Limits

5 limits

RATE LIMITS

FinOps

Resources

🔗
LinkedIn
LinkedIn
🔗
Website
Website
🔗
Documentation
Documentation
🔗
Community
Community
🔗
Plans
Plans
📰
Blog
Blog
🔗
Plugins
Plugins
👥
GitHubRepo
GitHubRepo
👥
GitHubOrg
GitHubOrg
📜
PrivacyPolicy
PrivacyPolicy
📜
TermsOfService
TermsOfService
🟢
StatusPage
StatusPage
💬
Support
Support

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Discourse API Documentation
  version: latest
items:
- info:
    name: Discourse Calendar - Events
    type: folder
  items:
  - info:
      name: List calendar events
      type: http
    http:
      method: GET
      url: https://{defaultHost}/discourse-post-event/events.json
      params:
      - name: include_details
        value: ''
        type: query
        description: 'Include detailed event information (creator, invitees, stats,

          etc.)'
      - name: category_id
        value: ''
        type: query
        description: Filter events by category ID
      - name: include_subcategories
        value: ''
        type: query
        description: Include events from subcategories when filtering by category
      - name: post_id
        value: ''
        type: query
        description: Filter to events associated with a specific post ID
      - name: attending_user
        value: ''
        type: query
        description: 'Filter to events where the specified user (username) has RSVP''d

          as going'
      - name: before
        value: ''
        type: query
        description: Return events starting before this date/time (ISO 8601 format)
      - name: after
        value: ''
        type: query
        description: Return events starting after this date/time (ISO 8601 format)
      - name: order
        value: ''
        type: query
        description: 'Sort order for events by start date (default: asc)'
      - name: limit
        value: ''
        type: query
        description: 'Maximum number of events to return (default: 200)'
    docs: List calendar events
  - info:
      name: Export calendar events in iCalendar format
      type: http
    http:
      method: GET
      url: https://{defaultHost}/discourse-post-event/events.ics
      params:
      - name: category_id
        value: ''
        type: query
        description: Filter events by category ID
      - name: include_subcategories
        value: ''
        type: query
        description: Include events from subcategories when filtering by category
      - name: attending_user
        value: ''
        type: query
        description: 'Filter to events where the specified user (username) has RSVP''d

          as going'
      - name: before
        value: ''
        type: query
        description: Return events starting before this date/time (ISO 8601 format)
      - name: after
        value: ''
        type: query
        description: Return events starting after this date/time (ISO 8601 format)
      - name: order
        value: ''
        type: query
        description: 'Sort order for events by start date (default: asc)'
      - name: limit
        value: ''
        type: query
        description: 'Maximum number of events to return (default: 200)'
    docs: Export calendar events in iCalendar format
- info:
    name: Backups
    type: folder
  items:
  - info:
      name: List backups
      type: http
    http:
      method: GET
      url: https://{defaultHost}/admin/backups.json
    docs: List backups
  - info:
      name: Create backup
      type: http
    http:
      method: POST
      url: https://{defaultHost}/admin/backups.json
      body:
        type: json
        data: '{}'
    docs: Create backup
  - info:
      name: Download backup
      type: http
    http:
      method: GET
      url: https://{defaultHost}/admin/backups/:filename
      params:
      - name: filename
        value: ''
        type: path
      - name: token
        value: ''
        type: query
    docs: Download backup
  - info:
      name: Send download backup email
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/admin/backups/:filename
      params:
      - name: filename
        value: ''
        type: path
    docs: Send download backup email
- info:
    name: Badges
    type: folder
  items:
  - info:
      name: List badges
      type: http
    http:
      method: GET
      url: https://{defaultHost}/admin/badges.json
    docs: List badges
  - info:
      name: Create badge
      type: http
    http:
      method: POST
      url: https://{defaultHost}/admin/badges.json
      body:
        type: json
        data: '{}'
    docs: Create badge
  - info:
      name: Update badge
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/admin/badges/:id.json
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Update badge
  - info:
      name: Delete badge
      type: http
    http:
      method: DELETE
      url: https://{defaultHost}/admin/badges/:id.json
      params:
      - name: id
        value: ''
        type: path
    docs: Delete badge
  - info:
      name: List badges for a user
      type: http
    http:
      method: GET
      url: https://{defaultHost}/user-badges/:username.json
      params:
      - name: username
        value: ''
        type: path
    docs: List badges for a user
- info:
    name: Categories
    type: folder
  items:
  - info:
      name: Retrieves a list of categories
      type: http
    http:
      method: GET
      url: https://{defaultHost}/categories.json
      params:
      - name: include_subcategories
        value: ''
        type: query
    docs: Retrieves a list of categories
  - info:
      name: Creates a category
      type: http
    http:
      method: POST
      url: https://{defaultHost}/categories.json
      body:
        type: json
        data: '{}'
    docs: Creates a category
  - info:
      name: Updates a category
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/categories/:id.json
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Updates a category
  - info:
      name: List topics
      type: http
    http:
      method: GET
      url: https://{defaultHost}/c/:slug/:id.json
      params:
      - name: slug
        value: ''
        type: path
      - name: id
        value: ''
        type: path
    docs: List topics
  - info:
      name: Show category
      type: http
    http:
      method: GET
      url: https://{defaultHost}/c/:id/show.json
      params:
      - name: id
        value: ''
        type: path
    docs: Show category
- info:
    name: Groups
    type: folder
  items:
  - info:
      name: Create a group
      type: http
    http:
      method: POST
      url: https://{defaultHost}/admin/groups.json
      body:
        type: json
        data: '{}'
    docs: Create a group
  - info:
      name: Delete a group
      type: http
    http:
      method: DELETE
      url: https://{defaultHost}/admin/groups/:id.json
      params:
      - name: id
        value: ''
        type: path
    docs: Delete a group
  - info:
      name: Get a group
      type: http
    http:
      method: GET
      url: https://{defaultHost}/groups/:name.json
      params:
      - name: name
        value: name
        type: path
        description: Use group name instead of id
    docs: Get a group
  - info:
      name: Update a group
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/groups/:id.json
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Update a group
  - info:
      name: Get a group by id
      type: http
    http:
      method: GET
      url: https://{defaultHost}/groups/by-id/:id.json
      params:
      - name: id
        value: name
        type: path
        description: Use group name instead of id
    docs: Get a group by id
  - info:
      name: List group members
      type: http
    http:
      method: GET
      url: https://{defaultHost}/groups/:name/members.json
      params:
      - name: name
        value: name
        type: path
        description: Use group name instead of id
    docs: List group members
  - info:
      name: Add group members
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/groups/:id/members.json
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Add group members
  - info:
      name: Remove group members
      type: http
    http:
      method: DELETE
      url: https://{defaultHost}/groups/:id/members.json
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Remove group members
  - info:
      name: List groups
      type: http
    http:
      method: GET
      url: https://{defaultHost}/groups.json
    docs: List groups
- info:
    name: Invites
    type: folder
  items:
  - info:
      name: Create an invite
      type: http
    http:
      method: POST
      url: https://{defaultHost}/invites.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      body:
        type: json
        data: '{}'
    docs: Create an invite
  - info:
      name: Create multiple invites
      type: http
    http:
      method: POST
      url: https://{defaultHost}/invites/create-multiple.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      body:
        type: json
        data: '{}'
    docs: Create multiple invites
- info:
    name: Notifications
    type: folder
  items:
  - info:
      name: Get the notifications that belong to the current user
      type: http
    http:
      method: GET
      url: https://{defaultHost}/notifications.json
    docs: Get the notifications that belong to the current user
  - info:
      name: Mark notifications as read
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/notifications/mark-read.json
      body:
        type: json
        data: '{}'
    docs: Mark notifications as read
- info:
    name: Posts
    type: folder
  items:
  - info:
      name: List latest posts across topics
      type: http
    http:
      method: GET
      url: https://{defaultHost}/posts.json
      params:
      - name: before
        value: ''
        type: query
        description: Load posts with an id lower than this value. Useful for pagination.
    docs: List latest posts across topics
  - info:
      name: Creates a new topic, a new post, or a private message
      type: http
    http:
      method: POST
      url: https://{defaultHost}/posts.json
      body:
        type: json
        data: '{}'
    docs: Creates a new topic, a new post, or a private message
  - info:
      name: Retrieve a single post
      type: http
    http:
      method: GET
      url: https://{defaultHost}/posts/:id.json
      params:
      - name: id
        value: ''
        type: path
    docs: 'This endpoint can be used to get the number of likes on a post using the

      `actions_summary` property in the response. `actions_summary` responses

      with the id of `2` signify a `like`. If there are no `actions_summary`

      items with the id of `2`, that means there are 0 likes. Other ids likely

      refer to various different flag types.

      '
  - info:
      name: Update a single post
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/posts/:id.json
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Update a single post
  - info:
      name: delete a single post
      type: http
    http:
      method: DELETE
      url: https://{defaultHost}/posts/:id.json
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: delete a single post
  - info:
      name: List replies to a post
      type: http
    http:
      method: GET
      url: https://{defaultHost}/posts/:id/replies.json
      params:
      - name: id
        value: ''
        type: path
    docs: List replies to a post
  - info:
      name: Lock a post from being edited
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/posts/:id/locked.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Lock a post from being edited
  - info:
      name: Like a post and other actions
      type: http
    http:
      method: POST
      url: https://{defaultHost}/post_actions.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      body:
        type: json
        data: '{}'
    docs: Like a post and other actions
- info:
    name: Private Messages
    type: folder
  items:
  - info:
      name: Get a list of private messages for a user
      type: http
    http:
      method: GET
      url: https://{defaultHost}/topics/private-messages/:username.json
      params:
      - name: username
        value: ''
        type: path
    docs: Get a list of private messages for a user
  - info:
      name: Get a list of private messages sent for a user
      type: http
    http:
      method: GET
      url: https://{defaultHost}/topics/private-messages-sent/:username.json
      params:
      - name: username
        value: ''
        type: path
    docs: Get a list of private messages sent for a user
- info:
    name: Search
    type: folder
  items:
  - info:
      name: Search for a term
      type: http
    http:
      method: GET
      url: https://{defaultHost}/search.json
      params:
      - name: q
        value: 'api @blake #support tags:api after:2021-06-04 in:unseen in:open

          order:latest_topic'
        type: query
        description: 'The query string needs to be url encoded and is made up of the following options:

          - Search term. This is just a string. Usually it would be the first item in the query.

          - `@<username>`: Use the `@` followed by the username to specify posts by this user.

          - `#<category>`: Use the `#` followed by the category slug to search within this category.

          - `tags:`: `api,solved` or for posts that have all the specified tags `api+solved`.

          - `before:`: `yyyy-mm-dd`

          - `after:`: `yyyy-mm-dd`

          - `order:`: `latest`, `likes`, `views`, `latest_topic`

          - `assigned:`: username (without `@`)

          - `in:`: `title`, `likes`, `personal`, `messages`, `seen`, `unseen`, `posted`, `created`, `watching`, `tracking`,
          `bookmarks`, `assigned`, `unassigned`, `first`, `pinned`, `wiki`

          - `with:`: `images`

          - `status:`: `open`, `closed`, `public`, `archived`, `noreplies`, `single_user`, `solved`, `unsolved`

          - `group:`: group_name or group_id

          - `group_messages:`: group_name or group_id

          - `min_posts:`: 1

          - `max_posts:`: 10

          - `min_views:`: 1

          - `max_views:`: 10


          If you are using cURL you can use the `-G` and the `--data-urlencode` flags to encode the query:


          ```

          curl -i -sS -X GET -G "http://localhost:4200/search.json" \

          --data-urlencode ''q=wordpress @scossar #fun after:2020-01-01''

          ```

          '
      - name: page
        value: '1'
        type: query
    docs: Search for a term
- info:
    name: Site
    type: folder
  items:
  - info:
      name: Get site info
      type: http
    http:
      method: GET
      url: https://{defaultHost}/site.json
    docs: Can be used to fetch all categories and subcategories
  - info:
      name: Get site basic info
      type: http
    http:
      method: GET
      url: https://{defaultHost}/site/basic-info.json
    docs: Can be used to fetch basic info about a site
- info:
    name: Tags
    type: folder
  items:
  - info:
      name: Get a list of tag groups
      type: http
    http:
      method: GET
      url: https://{defaultHost}/tag_groups.json
    docs: Get a list of tag groups
  - info:
      name: Creates a tag group
      type: http
    http:
      method: POST
      url: https://{defaultHost}/tag_groups.json
      body:
        type: json
        data: '{}'
    docs: Creates a tag group
  - info:
      name: Get a single tag group
      type: http
    http:
      method: GET
      url: https://{defaultHost}/tag_groups/:id.json
      params:
      - name: id
        value: ''
        type: path
    docs: Get a single tag group
  - info:
      name: Update tag group
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/tag_groups/:id.json
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Update tag group
  - info:
      name: Get a list of tags
      type: http
    http:
      method: GET
      url: https://{defaultHost}/tags.json
    docs: Get a list of tags
  - info:
      name: Get a specific tag
      type: http
    http:
      method: GET
      url: https://{defaultHost}/tag/:name.json
      params:
      - name: name
        value: ''
        type: path
    docs: Get a specific tag
- info:
    name: Topics
    type: folder
  items:
  - info:
      name: Get specific posts from a topic
      type: http
    http:
      method: GET
      url: https://{defaultHost}/t/:id/posts.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Get specific posts from a topic
  - info:
      name: Get a single topic
      type: http
    http:
      method: GET
      url: https://{defaultHost}/t/:id.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      params:
      - name: id
        value: ''
        type: path
    docs: Get a single topic
  - info:
      name: Remove a topic
      type: http
    http:
      method: DELETE
      url: https://{defaultHost}/t/:id.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      params:
      - name: id
        value: ''
        type: path
    docs: Remove a topic
  - info:
      name: Update a topic
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/t/-/:id.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Update a topic
  - info:
      name: Invite to topic
      type: http
    http:
      method: POST
      url: https://{defaultHost}/t/:id/invite.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Invite to topic
  - info:
      name: Invite group to topic
      type: http
    http:
      method: POST
      url: https://{defaultHost}/t/:id/invite-group.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Invite group to topic
  - info:
      name: Bookmark topic
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/t/:id/bookmark.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      params:
      - name: id
        value: ''
        type: path
    docs: Bookmark topic
  - info:
      name: Update the status of a topic
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/t/:id/status.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Update the status of a topic
  - info:
      name: Get the latest topics
      type: http
    http:
      method: GET
      url: https://{defaultHost}/latest.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      params:
      - name: order
        value: ''
        type: query
        description: 'Enum: `default`, `created`, `activity`, `views`, `posts`, `category`,

          `likes`, `op_likes`, `posters`'
      - name: ascending
        value: ''
        type: query
        description: Defaults to `desc`, add `ascending=true` to sort asc
      - name: per_page
        value: ''
        type: query
        description: Maximum number of topics returned, between 1-100
    docs: Get the latest topics
  - info:
      name: Get the top topics filtered by period
      type: http
    http:
      method: GET
      url: https://{defaultHost}/top.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      params:
      - name: period
        value: ''
        type: query
        description: 'Enum: `all`, `yearly`, `quarterly`, `monthly`, `weekly`, `daily`'
      - name: per_page
        value: ''
        type: query
        description: Maximum number of topics returned, between 1-100
    docs: Get the top topics filtered by period
  - info:
      name: Set notification level
      type: http
    http:
      method: POST
      url: https://{defaultHost}/t/:id/notifications.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Set notification level
  - info:
      name: Update topic timestamp
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/t/:id/change-timestamp.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Update topic timestamp
  - info:
      name: Create topic timer
      type: http
    http:
      method: POST
      url: https://{defaultHost}/t/:id/timer.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Create topic timer
  - info:
      name: Get topic by external_id
      type: http
    http:
      method: GET
      url: https://{defaultHost}/t/external_id/:external_id.json
      params:
      - name: external_id
        value: ''
        type: path
    docs: Get topic by external_id
- info:
    name: Uploads
    type: folder
  items:
  - info:
      name: Creates an upload
      type: http
    http:
      method: POST
      url: https://{defaultHost}/uploads.json
      body:
        type: multipart-form
        data:
        - name: type
          type: text
          value: ''
        - name: user_id
          type: text
          value: ''
        - name: synchronous
          type: text
          value: ''
        - name: file
          type: text
          value: ''
    docs: Creates an upload
  - info:
      name: Initiates a direct external upload
      type: http
    http:
      method: POST
      url: https://{defaultHost}/uploads/generate-presigned-put.json
      body:
        type: json
        data: '{}'
    docs: 'Direct external uploads bypass the usual method of creating uploads

      via the POST /uploads route, and upload directly to an external provider,

      which by default is S3. This route begins the process, and will return

      a unique identifier for the external upload as well as a presigned URL

      which is where the file binary blob should be uploaded to.


      Once the upload is complete to the external service, you must call the

      POST /complete-external-upload route using the unique identifier returned

      by this rou'
  - info:
      name: Completes a direct external upload
      type: http
    http:
      method: POST
      url: https://{defaultHost}/uploads/complete-external-upload.json
      body:
        type: json
        data: '{}'
    docs: 'Completes an external upload initialized with /get-presigned-put. The

      file will be moved from its temporary location in external storage to

      a final destination in the S3 bucket. An Upload record will also be

      created in the database in most cases.


      If a sha1-checksum was provided in the initial request it will also

      be compared with the uploaded file in storage to make sure the same

      file was uploaded. The file size will be compared for the same reason.


      You must have the correct permissions and CO'
  - info:
      name: Creates a multipart external upload
      type: http
    http:
      method: POST
      url: https://{defaultHost}/uploads/create-multipart.json
      body:
        type: json
        data: '{}'
    docs: 'Creates a multipart upload in the external storage provider, storing

      a temporary reference to the external upload similar to /get-presigned-put.


      You must have the correct permissions and CORS settings configured in your

      external provider. We support AWS S3 as the default. See:


      https://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4.


      An external file store must be set up and `enable_direct_s3_uploads` must

      be set to true for this endpoint to function.


      '
  - info:
      name: Generates batches of presigned URLs for multipart parts
      type: http
    http:
      method: POST
      url: https://{defaultHost}/uploads/batch-presign-multipart-parts.json
      body:
        type: json
        data: '{}'
    docs: 'Multipart uploads are uploaded in chunks or parts to individual presigned

      URLs, similar to the one generated by /generate-presigned-put. The part

      numbers provided must be between 1 and 10000. The total number of parts

      will depend on the chunk size in bytes that you intend to use to upload

      each chunk. For example a 12MB file may have 2 5MB chunks and a final

      2MB chunk, for part numbers 1, 2, and 3.


      This endpoint will return a presigned URL for each part number provided,

      which you can then use to'
  - info:
      name: Abort multipart upload
      type: http
    http:
      method: POST
      url: https://{defaultHost}/uploads/abort-multipart.json
      body:
        type: json
        data: '{}'
    docs: 'This endpoint aborts the multipart upload initiated with /create-multipart.

      This should be used when cancelling the upload. It does not matter if parts

      were already uploaded into the external storage provider.


      You must have the correct permissions and CORS settings configured in your

      external provider. We support AWS S3 as the default. See:


      https://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4.


      An external file store must be set up and `enable_direct_s3_uploads` must

      be set to t'
  - info:
      name: Complete multipart upload
      type: http
    http:
      method: POST
      url: https://{defaultHost}/uploads/complete-multipart.json
      body:
        type: json
        data: '{}'
    docs: 'Completes the multipart upload in the external store, and copies the

      file from its temporary location to its final location in the store.

      All of the parts must have been uploaded to the external storage provider.

      An Upload record will be completed in most cases once the file is copied

      to its final location.


      You must have the correct permissions and CORS settings configured in your

      external provider. We support AWS S3 as the default. See:


      https://meta.discourse.org/t/-/210469#s3-multipart-direc'
- info:
    name: Users
    type: folder
  items:
  - info:
      name: Creates a user
      type: http
    http:
      method: POST
      url: https://{defaultHost}/users.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      body:
        type: json
        data: '{}'
    docs: Creates a user
  - info:
      name: Get a single user by username
      type: http
    http:
      method: GET
      url: https://{defaultHost}/u/:username.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      params:
      - name: username
        value: ''
        type: path
    docs: Get a single user by username
  - info:
      name: Update a user
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/u/:username.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      params:
      - name: username
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Update a user
  - info:
      name: Get a user by external_id
      type: http
    http:
      method: GET
      url: https://{defaultHost}/u/by-external/:external_id.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      params:
      - name: external_id
        value: ''
        type: path
    docs: Get a user by external_id
  - info:
      name: Get a user by identity provider external ID
      type: http
    http:
      method: GET
      url: https://{defaultHost}/u/by-external/:provider/:external_id.json
      headers:
      - name: Api-Key
        value: ''
      - name: Api-Username
        value: ''
      params:
      - name: provider
        value: ''
        type: path
        description: 'Authentication provider name. Can be found in the provider callback

          URL: `/auth/{provider}/callback`'
      - name: external_id
        value: ''
        type: path
    docs: Get a user by identity provider external ID
  - info:
      name: Update avatar
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/u/:username/preferences/avatar/pick.json
      params:
      - name: username
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Update avatar
  - info:
      name: Update email
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/u/:username/preferences/email.json
      params:
      - name: username
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Update email
  - info:
      name: Update username
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/u/:username/preferences/username.json
      params:
      - name: username
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Update username
  - info:
      name: Get a public list of users
      type: http
    http:
      method: GET
      url: https://{defaultHost}/directory_items.json
      params:
      - name: period
        value: ''
        type: query
      - name: order
        value: ''
        type: query
      - name: asc
        value: ''
        type: query
      - name: page
        value: ''
        type: query
    docs: Get a public list of users
  - info:
      name: Get a user by id
      type: http
    http:
      method: GET
      url: https://{defaultHost}/admin/users/:id.json
      params:
      - name: id
        value: ''
        type: path
    docs: Get a user by id
  - info:
      name: Delete a user
      type: http
    http:
      method: DELETE
      url: https://{defaultHost}/admin/users/:id.json
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Delete a user
  - info:
      name: Activate a user
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/admin/users/:id/activate.json
      params:
      - name: id
        value: ''
        type: path
    docs: Activate a user
  - info:
      name: Deactivate a user
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/admin/users/:id/deactivate.json
      params:
      - name: id
        value: ''
        type: path
    docs: Deactivate a user
  - info:
      name: Suspend a user
      type: http
    http:
      method: PUT
      url: https://{defaultHost}/admin/users/:id/suspend.json
      params:
    

# --- truncated at 32 KB (36 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/discourse/refs/heads/main/apis.yml