mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
620 lines
18 KiB
YAML
620 lines
18 KiB
YAML
openapi: 3.0.0
|
||
info:
|
||
description: >
|
||
There is also a work-in-progress [Postman API
|
||
reference](https://documenter.getpostman.com/view/4508214/RW8FERUn).
|
||
version: 4.0.0
|
||
title: Mattermost API Reference
|
||
termsOfService: https://about.mattermost.com/default-terms/
|
||
contact:
|
||
email: feedback@mattermost.com
|
||
x-logo:
|
||
url: https://mattermost.com/wp-content/uploads/2022/02/logoHorizontal.png
|
||
backgroundColor: "#FFFFFF"
|
||
tags:
|
||
- name: introduction
|
||
description: >
|
||
The Mattermost Web Services API is used by Mattermost clients and third
|
||
party applications to interact with the server. [JavaScript and Golang
|
||
drivers for](/#tag/drivers) connecting to the APIs are also available.
|
||
|
||
|
||
### Support
|
||
|
||
|
||
Mattermost core committers work with the community to keep the API documentation up-to-date.
|
||
|
||
|
||
If you have questions on API routes not listed in this reference, please [join the Mattermost community server](https://community.mattermost.com) to ask questions in the Developers channel, [or post questions to our Developer Discussion forum](https://forum.mattermost.org/c/dev).
|
||
|
||
|
||
[Bug reports](https://github.com/mattermost/mattermost/issues) in the documentation or the API are also welcome, as are pull requests to fix the issues.
|
||
|
||
|
||
### Contributing
|
||
|
||
|
||
When you have answers to API questions not addressed in our documentation we ask you to consider making a pull request to improve our reference. Small and large changes are all welcome.
|
||
|
||
|
||
We also have [Help Wanted tickets](https://github.com/mattermost/mattermost/issues?q=is%3Aopen+is%3Aissue+label%3AArea%2FAPI) available for community members who would like to help others more easily use the APIs. We acknowledge everyone's contribution in the [release notes of our next version](https://docs.mattermost.com/administration/changelog.html#contributors).
|
||
|
||
|
||
The source code for this API reference is hosted at https://github.com/mattermost/mattermost/tree/master/api.
|
||
- name: schema
|
||
description: >
|
||
All API access is through HTTP(S) requests at
|
||
`your-mattermost-url.com/api/v4`. All request and response bodies are
|
||
`application/json`.
|
||
|
||
|
||
When using endpoints that require a user id, the string `me` can be used in place of the user id to indicate the action is to be taken for the logged in user.
|
||
|
||
|
||
For all endpoints that implement pagination via the `per_page` parameter, the maximum number of items returned per request is capped at 200. If `per_page` exceeds 200, the list will be silently truncated to 200 items.
|
||
- name: drivers
|
||
description: >
|
||
The easiest way to interact with the Mattermost Web Service API is through
|
||
a language specific driver.
|
||
|
||
|
||
#### Official Drivers
|
||
|
||
* Mattermost JavaScript/TypeScript Driver
|
||
* [NPM](https://www.npmjs.com/package/@mattermost/client)
|
||
* [Source](https://github.com/mattermost/mattermost/tree/master/webapp/platform/client)
|
||
|
||
* [Mattermost Golang Driver](https://pkg.go.dev/github.com/mattermost/mattermost/server/public/model#Client4)
|
||
|
||
#### Community-built Drivers
|
||
|
||
For community-built drivers and API wrappers, see [our app directory](https://mattermost.com/marketplace/).
|
||
- name: authentication
|
||
description: >
|
||
There are multiple ways to authenticate against the Mattermost API.
|
||
|
||
|
||
All examples assume there is a Mattermost instance running at http://localhost:8065.
|
||
|
||
|
||
#### Session Token
|
||
|
||
|
||
Make an HTTP POST to `your-mattermost-url.com/api/v4/users/login` with a JSON body indicating the user’s `login_id`, `password` and optionally the MFA `token`. The `login_id` can be an email, username or an AD/LDAP ID depending on the system's configuration.
|
||
|
||
|
||
```
|
||
|
||
curl -i -d '{"login_id":"someone@nowhere.com","password":"thisisabadpassword"}' http://localhost:8065/api/v4/users/login
|
||
|
||
```
|
||
|
||
|
||
NOTE: If you're running cURL on windows, you will have to change the single quotes to double quotes, and escape the inner double quotes with backslash, like below:
|
||
|
||
|
||
```
|
||
|
||
curl -i -d "{\"login_id\":\"someone@nowhere.com\",\"password\":\"thisisabadpassword\"}" http://localhost:8065/api/v4/users/login
|
||
|
||
```
|
||
|
||
|
||
If successful, the response will contain a `Token` header and a user object in the body.
|
||
|
||
|
||
```
|
||
|
||
HTTP/1.1 200 OK
|
||
|
||
Set-Cookie: MMSID=hyr5dmb1mbb49c44qmx4whniso; Path=/; Max-Age=2592000; HttpOnly
|
||
|
||
Token: hyr5dmb1mbb49c44qmx4whniso
|
||
|
||
X-Ratelimit-Limit: 10
|
||
|
||
X-Ratelimit-Remaining: 9
|
||
|
||
X-Ratelimit-Reset: 1
|
||
|
||
X-Request-Id: smda55ckcfy89b6tia58shk5fh
|
||
|
||
X-Version-Id: developer
|
||
|
||
Date: Fri, 11 Sep 2015 13:21:14 GMT
|
||
|
||
Content-Length: 657
|
||
|
||
Content-Type: application/json; charset=utf-8
|
||
|
||
|
||
{{user object as json}}
|
||
|
||
```
|
||
|
||
|
||
Include the `Token` as part of the `Authorization` header on your future API requests with the `Bearer` method.
|
||
|
||
|
||
```
|
||
|
||
curl -i -H 'Authorization: Bearer hyr5dmb1mbb49c44qmx4whniso' http://localhost:8065/api/v4/users/me
|
||
|
||
```
|
||
|
||
|
||
You should now be able to access the API as the user you logged in as.
|
||
|
||
|
||
#### Personal Access Tokens
|
||
|
||
|
||
Using [personal access tokens](https://docs.mattermost.com/developer/personal-access-tokens.html) is very similar to using a session token. The only real difference is that session tokens will expire, while personal access tokens will live until they are manually revoked by the user or an admin.
|
||
|
||
|
||
Just like session tokens, include the personal access token as part of the `Authorization` header in your requests using the `Bearer` method. Assuming our personal access token is `9xuqwrwgstrb3mzrxb83nb357a`, we could use it as shown below.
|
||
|
||
|
||
```
|
||
|
||
curl -i -H 'Authorization: Bearer 9xuqwrwgstrb3mzrxb83nb357a' http://localhost:8065/api/v4/users/me
|
||
|
||
```
|
||
|
||
|
||
#### OAuth 2.0
|
||
|
||
|
||
Mattermost has the ability to act as an [OAuth 2.0](https://tools.ietf.org/html/rfc6749) service provider.
|
||
|
||
|
||
The official documentation for [using your Mattermost server as an OAuth 2.0 service provider can be found here.](https://docs.mattermost.com/developer/oauth-2-0-applications.html)
|
||
|
||
|
||
For an example on how to register an OAuth 2.0 app with your Mattermost instance, please see the [Mattermost-Zapier integration documentation](https://docs.mattermost.com/integrations/zapier.html#register-zapier-as-an-oauth-2-0-application).
|
||
- name: errors
|
||
description: >
|
||
All errors will return an appropriate HTTP response code along with the
|
||
following JSON body:
|
||
|
||
```
|
||
|
||
{
|
||
"id": "the.error.id",
|
||
"message": "Something went wrong", // the reason for the error
|
||
"request_id": "", // the ID of the request
|
||
"status_code": 0, // the HTTP status code
|
||
"is_oauth": false // whether the error is OAuth specific
|
||
}
|
||
|
||
```
|
||
- name: rate limiting
|
||
description: >
|
||
Whenever you make an HTTP request to the Mattermost API you might notice
|
||
the following headers included in the response:
|
||
|
||
```
|
||
|
||
X-Ratelimit-Limit: 10
|
||
|
||
X-Ratelimit-Remaining: 9
|
||
|
||
X-Ratelimit-Reset: 1441983590
|
||
|
||
```
|
||
|
||
|
||
These headers are telling you your current rate limit status.
|
||
|
||
|
||
| Header | Description |
|
||
|
||
| ------ | ----------- |
|
||
|
||
| X-Ratelimit-Limit | The maximum number of requests you can make per second. |
|
||
|
||
| X-Ratelimit-Remaining | The number of requests remaining in the current window. |
|
||
|
||
| X-Ratelimit-Reset | The remaining UTC epoch seconds before the rate limit resets. |
|
||
|
||
|
||
If you exceed your rate limit for a window you will receive the following error in the body of the response:
|
||
|
||
|
||
```
|
||
|
||
HTTP/1.1 429 Too Many Requests
|
||
|
||
Date: Tue, 10 Sep 2015 11:20:28 GMT
|
||
|
||
X-RateLimit-Limit: 10
|
||
|
||
X-RateLimit-Remaining: 0
|
||
|
||
X-RateLimit-Reset: 1
|
||
|
||
|
||
limit exceeded
|
||
|
||
```
|
||
- name: WebSocket
|
||
description: >
|
||
In addition to the HTTP RESTful web service, Mattermost also offers a
|
||
WebSocket event delivery system and some API functionality.
|
||
|
||
|
||
To connect to the WebSocket follow the standard opening handshake as [defined by the RFC specification](https://tools.ietf.org/html/rfc6455#section-1.3) to the `/api/v4/websocket` endpoint of Mattermost.
|
||
|
||
|
||
#### Authentication
|
||
|
||
|
||
The Mattermost WebSocket can be authenticated using [the standard API authentication methods](/#tag/authentication) (by a cookie or with an explicit Authorization header) or through an authentication challenge. If you're authenticating from a browser and have logged in with the Mattermost API, your authentication cookie should already be set. This is how the Mattermost webapp authenticates with the WebSocket.
|
||
|
||
|
||
To authenticate with an authentication challenge, first connect the WebSocket and then send the following JSON over the connection:
|
||
|
||
|
||
```
|
||
|
||
{
|
||
"seq": 1,
|
||
"action": "authentication_challenge",
|
||
"data": {
|
||
"token": "mattermosttokengoeshere"
|
||
}
|
||
}
|
||
|
||
```
|
||
|
||
|
||
If successful, you will receive a standard OK response over the WebSocket connection:
|
||
|
||
|
||
```
|
||
|
||
{
|
||
"status": "OK",
|
||
"seq_reply": 1
|
||
}
|
||
|
||
```
|
||
|
||
|
||
Once successfully authenticated, the server will pass a `hello` WebSocket event containing server version over the connection.
|
||
|
||
|
||
#### Events
|
||
|
||
|
||
WebSocket events are primarily used to alert the client to changes in Mattermost, such as delivering new posts or alerting the client that another user is typing in a channel.
|
||
|
||
|
||
Events on the WebSocket will have the form:
|
||
|
||
|
||
```
|
||
|
||
{
|
||
"event": "hello",
|
||
"data": {
|
||
"server_version": "3.6.0.1451.1c38da627ebb4e3635677db6939e9195"
|
||
},
|
||
"broadcast":{
|
||
"omit_users": null,
|
||
"user_id": "ay5sq51sebfh58ktrce5ijtcwy",
|
||
"channel_id": "",
|
||
"team_id": ""
|
||
},
|
||
"seq": 0
|
||
}
|
||
|
||
```
|
||
|
||
|
||
The `event` field indicates the event type, `data` contains any data relevant to the event and `broadcast` contains information about who the event was sent to. For example, the above example has `user_id` set to "ay5sq51sebfh58ktrce5ijtcwy" meaning that only the user with that ID received this event broadcast. The `omit_users` field can contain an array of user IDs that were specifically omitted from receiving the event.
|
||
|
||
|
||
The list of Mattermost WebSocket events are:
|
||
|
||
- added_to_team
|
||
|
||
- authentication_challenge
|
||
|
||
- channel_converted
|
||
|
||
- channel_created
|
||
|
||
- channel_deleted
|
||
|
||
- channel_member_updated
|
||
|
||
- channel_updated
|
||
|
||
- channel_viewed
|
||
|
||
- config_changed
|
||
|
||
- delete_team
|
||
|
||
- direct_added
|
||
|
||
- emoji_added
|
||
|
||
- ephemeral_message
|
||
|
||
- group_added
|
||
|
||
- hello
|
||
|
||
- leave_team
|
||
|
||
- license_changed
|
||
|
||
- memberrole_updated
|
||
|
||
- new_user
|
||
|
||
- plugin_disabled
|
||
|
||
- plugin_enabled
|
||
|
||
- plugin_statuses_changed
|
||
|
||
- post_deleted
|
||
|
||
- post_edited
|
||
|
||
- post_unread
|
||
|
||
- posted
|
||
|
||
- preference_changed
|
||
|
||
- preferences_changed
|
||
|
||
- preferences_deleted
|
||
|
||
- reaction_added
|
||
|
||
- reaction_removed
|
||
|
||
- response
|
||
|
||
- role_updated
|
||
|
||
- status_change
|
||
|
||
- typing
|
||
|
||
- update_team
|
||
|
||
- user_added
|
||
|
||
- user_removed
|
||
|
||
- user_role_updated
|
||
|
||
- user_updated
|
||
|
||
- dialog_opened
|
||
|
||
- thread_updated
|
||
|
||
- thread_follow_changed
|
||
|
||
- thread_read_changed
|
||
|
||
|
||
#### WebSocket API
|
||
|
||
|
||
Mattermost has some basic support for WebSocket APIs. A connected WebSocket can make requests by sending the following over the connection:
|
||
|
||
|
||
```
|
||
|
||
{
|
||
"action": "user_typing",
|
||
"seq": 2,
|
||
"data": {
|
||
"channel_id": "nhze199c4j87ped4wannrjdt9c",
|
||
"parent_id": ""
|
||
}
|
||
}
|
||
|
||
```
|
||
|
||
|
||
This is an example of making a `user_typing` request, with the purpose of alerting the server that the connected client has begun typing in a channel or thread. The `action` field indicates what is being requested, and performs a similar duty as the route in a HTTP API. The `data` field is used to add any additional data along with the request. The server supports binary websocket messages as well in case the client has such a requirement.
|
||
|
||
|
||
The `seq` or sequence number is set by the client and should be incremented with every use. It is used to distinguish responses to requests that come down the WebSocket. For example, a standard response to the above request would be:
|
||
|
||
|
||
```
|
||
|
||
{
|
||
"status": "OK",
|
||
"seq_reply": 2
|
||
}
|
||
|
||
```
|
||
|
||
|
||
Notice `seq_reply` is 2, matching the `seq` of the original request. Using this a client can distinguish which request the response is meant for.
|
||
|
||
|
||
If there was any information to respond with, it would be encapsulated in a `data` field.
|
||
|
||
|
||
In the case of an error, the response would be:
|
||
|
||
|
||
```
|
||
|
||
{
|
||
"status": "FAIL",
|
||
"seq_reply": 2,
|
||
"error": {
|
||
"id": "some.error.id.here",
|
||
"message": "Some error message here"
|
||
}
|
||
}
|
||
|
||
```
|
||
|
||
|
||
The list of WebSocket API actions is:
|
||
|
||
- user_typing
|
||
|
||
- get_statuses
|
||
|
||
- get_statuses_by_ids
|
||
|
||
|
||
To see how these actions work, please refer to either the [Golang WebSocket driver](https://github.com/mattermost/mattermost/blob/master/server/public/model/websocket_client.go) or our [JavaScript WebSocket driver](https://github.com/mattermost/mattermost/blob/master/webapp/platform/client/src/websocket.ts).
|
||
- name: common parameters
|
||
description: >
|
||
- `per_page`: For paged APIs, the number of items to return per page.
|
||
|
||
The maximum number of items returned per request is capped at 200. If `per_page` exceeds 200, the list will be silently truncated to 200 items.
|
||
|
||
If a paged API requires a `per_page` parameter and it is not provided, the default value is 60.
|
||
- name: users
|
||
description: >
|
||
Endpoints for creating, getting and interacting with users.
|
||
|
||
|
||
When using endpoints that require a user id, the string `me` can be used in place of the user id to indicate the action is to be taken for the logged in user.
|
||
- name: bots
|
||
description: Endpoints for creating, getting and updating bot users.
|
||
- name: teams
|
||
description: Endpoints for creating, getting and interacting with teams.
|
||
- name: channels
|
||
description: Endpoints for creating, getting and interacting with channels.
|
||
- name: posts
|
||
description: Endpoints for creating, getting and interacting with posts.
|
||
- name: files
|
||
description: Endpoints for uploading and interacting with files.
|
||
- name: uploads
|
||
description: Endpoints for creating and performing file uploads.
|
||
- name: bookmarks
|
||
description: Endpoints for creating, getting and interacting with channel bookmarks.
|
||
- name: preferences
|
||
description: Endpoints for saving and modifying user preferences.
|
||
- name: status
|
||
description: Endpoints for getting and updating user statuses.
|
||
- name: emoji
|
||
description: Endpoints for creating, getting and interacting with emojis.
|
||
- name: reactions
|
||
description: Endpoints for creating, getting and removing emoji reactions.
|
||
- name: webhooks
|
||
description: Endpoints for creating, getting and updating webhooks.
|
||
- name: commands
|
||
description: Endpoints for creating, getting and updating slash commands.
|
||
- name: system
|
||
description: General endpoints for interacting with the server, such as configuration and logging.
|
||
- name: brand
|
||
description:
|
||
Endpoints related to custom branding and white-labeling. See [our branding
|
||
documentation](https://docs.mattermost.com/administration/branding.html)
|
||
for more information.
|
||
- name: OAuth
|
||
description:
|
||
Endpoints for configuring and interacting with Mattermost as an OAuth 2.0
|
||
service provider.
|
||
- name: SAML
|
||
description: Endpoints for configuring and interacting with SAML.
|
||
- name: LDAP
|
||
description: Endpoints for configuring and interacting with LDAP.
|
||
- name: groups
|
||
description: Endpoints related to LDAP groups.
|
||
- name: compliance
|
||
description: Endpoints for creating, getting and downloading compliance reports.
|
||
- name: cluster
|
||
description: Endpoints for configuring and interacting with high availability clusters.
|
||
- name: elasticsearch
|
||
description: Endpoints for configuring and interacting with Elasticsearch.
|
||
- name: data retention
|
||
description: Endpoint for getting data retention policy settings.
|
||
- name: jobs
|
||
description:
|
||
Endpoints related to various background jobs that can be run by the server
|
||
or separately by job servers.
|
||
- name: plugins
|
||
description: Endpoints related to uploading and managing plugins.
|
||
- name: roles
|
||
description: Endpoints for creating, getting and updating roles.
|
||
- name: schemes
|
||
description: Endpoints for creating, getting and updating and deleting schemes.
|
||
- name: integration_actions
|
||
description: Endpoints for interactive actions for use by integrations.
|
||
- name: shared channels
|
||
description: Endpoints for getting information about shared channels.
|
||
- name: terms of service
|
||
description: Endpoints for getting and updating custom terms of service.
|
||
- name: imports
|
||
description: Endpoints related to import files.
|
||
- name: exports
|
||
description: Endpoints related to export files.
|
||
x-tagGroups:
|
||
- name: Overview
|
||
tags:
|
||
- introduction
|
||
- schema
|
||
- name: Standard Features
|
||
tags:
|
||
- drivers
|
||
- authentication
|
||
- errors
|
||
- rate limiting
|
||
- WebSocket
|
||
- common parameters
|
||
- name: Endpoints
|
||
tags:
|
||
- users
|
||
- bots
|
||
- teams
|
||
- channels
|
||
- posts
|
||
- threads
|
||
- files
|
||
- uploads
|
||
- bookmarks
|
||
- preferences
|
||
- status
|
||
- emoji
|
||
- reactions
|
||
- webhooks
|
||
- commands
|
||
- system
|
||
- brand
|
||
- OAuth
|
||
- SAML
|
||
- LDAP
|
||
- groups
|
||
- compliance
|
||
- cluster
|
||
- cloud
|
||
- elasticsearch
|
||
- bleve
|
||
- data retention
|
||
- jobs
|
||
- plugins
|
||
- roles
|
||
- schemes
|
||
- integration_actions
|
||
- remote clusters
|
||
- shared channels
|
||
- terms of service
|
||
- imports
|
||
- permissions
|
||
- exports
|
||
- usage
|
||
servers:
|
||
- url: http://your-mattermost-url.com
|
||
- url: https://your-mattermost-url.com
|
||
paths:
|