Discourse API Documentation
latesthttps://{defaultHost}defaultHost- default
discourse.example.com
This page contains the documentation on how to use Discourse through API calls.
Note: For any endpoints not listed you can follow the reverse engineer the Discourse API guide to figure out how to use an API endpoint.
Request Content-Type
The Content-Type for POST and PUT requests can be set to application/x-www-form-urlencoded,
multipart/form-data, or application/json.
Endpoint Names and Response Content-Type
Most API endpoints provide the same content as their HTML counterparts. For example
the URL /categories serves a list of categories, the /categories.json API provides the
same information in JSON format.
Instead of sending API requests to /categories.json you may also send them to /categories
and add an Accept: application/json header to the request to get the JSON response.
Sending requests with the Accept header is necessary if you want to use URLs
for related endpoints returned by the API, such as pagination URLs.
These URLs are returned without the .json prefix so you need to add the header in
order to get the correct response format.
Authentication
Some endpoints do not require any authentication, pretty much anything else will require you to be authenticated.
To become authenticated you will need to create an API Key from the admin panel.
Once you have your API Key you can pass it in along with your API Username as an HTTP header like this:
curl -X GET "http://127.0.0.1:3000/admin/users/list/active.json" \
-H "Api-Key: 714552c6148e1617aeab526d0606184b94a80ec048fc09894ff1a72b740c5f19" \
-H "Api-Username: system"and this is how POST requests will look:
curl -X POST "http://127.0.0.1:3000/categories" \
-H "Content-Type: multipart/form-data;" \
-H "Api-Key: 714552c6148e1617aeab526d0606184b94a80ec048fc09894ff1a72b740c5f19" \
-H "Api-Username: system" \
-F "name=89853c20-4409-e91a-a8ea-f6cdff96aaaa" \
-F "color=49d9e9" \
-F "text_color=f0fcfd"Boolean values
If an endpoint accepts a boolean be sure to specify it as a lowercase
true or false value unless noted otherwise.
Content
Topics
- POSTCreates a new topic, a new post, or a private message
- GETGet specific posts from a topic
- GETGet a single topic
- DELETERemove a topic
- PUTUpdate a topic
- POSTInvite to topic
- POSTInvite group to topic
- PUTBookmark topic
- PUTUpdate the status of a topic
- GETGet the latest topics
- GETGet the top topics filtered by period
- POSTSet notification level
- PUTUpdate topic timestamp
- POSTCreate topic timer
- GETGet topic by external_
id
Posts
Private Messages
Categories
Search
Uploads
Community
Users
- POSTGrant a badge to a user
- GETList badges for a user
- POSTCreates a user
- GETGet a single user by username
- PUTUpdate a user
- GETGet a user by external_
id - GETGet a user by identity provider external ID
- PUTUpdate avatar
- PUTUpdate email
- PUTUpdate username
- GETGet a public list of users
- GETGet a user by id
- DELETEDelete a user
- PUTActivate a user
- PUTDeactivate a user
- PUTSuspend a user
- PUTSilence a user
- PUTAnonymize a user
- POSTMerge a user
- POSTLog a user out
- POSTRefresh gravatar
- GETList users
- GETList users by flag
- GETGet a list of user actions
- POSTSend password reset email
- PUTChange password
- GETGet email addresses belonging to a user