mirror of
https://github.com/mattermost/mattermost.git
synced 2026-02-03 20:40:00 -05:00
* Add common /ai endpoints for agents and services and common component for agent selection * Fix vet api * Add a bunch of redux stuff * Fixes * Missed an add * fix types * Add a hook to determine if bridge is enabled * Add debounce to hook to prevent double fetches from PLUGIN_* and CONFIG_CHANGED event both firing when a plugin state is changed * Fix i18n * Rename to remove 'AI' (#34393) --------- Co-authored-by: Christopher Speller <crspeller@gmail.com> Co-authored-by: Mattermost Build <build@mattermost.com>
472 lines
17 KiB
YAML
472 lines
17 KiB
YAML
openapi: 3.0.0
|
|
info:
|
|
description: >
|
|
The Mattermost Web Services API enables Mattermost clients and third-party applications
|
|
to interact with Mattermost servers.
|
|
|
|
|
|
[Official JavaScript and Golang drivers](#/#official-drivers)
|
|
are available to simplify API integration.
|
|
|
|
|
|
By using this API, you agree to our [terms of service](https://about.mattermost.com/default-terms/).
|
|
|
|
|
|
[Find out more about Mattermost](https://about.mattermost.com/)
|
|
|
|
## Contents
|
|
|
|
### Core Concepts
|
|
|
|
* [Schema & Conventions](#/#schema--conventions)
|
|
|
|
* [Authentication](#/#authentication)
|
|
|
|
* [Rate Limiting](#/#rate-limiting)
|
|
|
|
* [Error Handling](#/#error-handling)
|
|
|
|
* [WebSocket](#/#websocket)
|
|
|
|
* [Authentication](#/#authentication-1)
|
|
|
|
* [Websocket Events](#/#websocket-events)
|
|
|
|
* [Websocket API](#/#websocket-api)
|
|
|
|
### Drivers
|
|
|
|
* [Official Drivers](#/#official-drivers)
|
|
|
|
* [Community-built Drivers](#/#community-built-drivers)
|
|
|
|
### Community
|
|
|
|
* [Support](#/#support)
|
|
|
|
* [Contributing](#/#contributing)
|
|
|
|
|
|
## Schema & Conventions
|
|
|
|
- All API access is through HTTP(S) requests at `your-mattermost-url/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:
|
|
|
|
- Maximum items per page: 200 (requests exceeding this will be silently truncated)
|
|
|
|
- Default value if a paged API requires a `per_page` parameter and it is not provided: 60
|
|
|
|
## Authentication
|
|
|
|
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/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.
|
|
|
|
```bash
|
|
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:
|
|
|
|
|
|
```bash
|
|
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
|
|
HTTP/1.1 200 OK
|
|
Content-Type: application/json
|
|
Permissions-Policy:
|
|
Referrer-Policy: no-referrer
|
|
Token: ckh3t4knu3fzujt76o57f5jo4w
|
|
Vary: Origin
|
|
Vary: Accept-Encoding
|
|
X-Content-Type-Options: nosniff
|
|
X-Request-Id: bk3uzm335jr9tnoh4mcsybmmjr
|
|
X-Version-Id: 10.6.0.13685270376.215f100adf6ccda09afcaaa84ac4bfbd.true
|
|
Date: Fri, 28 Mar 2025 09:33:22 GMT
|
|
Content-Length: 796
|
|
|
|
{{user object as json}}
|
|
```
|
|
|
|
Include the `Token` as part of the `Authorization` header on your future API requests with the `Bearer` method.
|
|
|
|
```bash
|
|
curl -i -H 'Authorization: Bearer ckh3t4knu3fzujt76o57f5jo4w' http://localhost:8065/api/v4/users/me
|
|
```
|
|
Alternatively, include the `Token` as your `MMAUTHTOKEN` cookie value on you future API requests:
|
|
|
|
```bash
|
|
curl -i -H 'Cookie: MMAUTHTOKEN=ckh3t4knu3fzujt76o57f5jo4w' 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://developers.mattermost.com/integrate/reference/personal-access-token/) 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.
|
|
|
|
```bash
|
|
curl -i -H 'Authorization: Bearer 9xuqwrwgstrb3mzrxb83nb357a' http://localhost:8065/api/v4/users/me
|
|
```
|
|
|
|
## Rate Limiting
|
|
Whenever you make an HTTP request to the Mattermost API you might notice
|
|
the following headers included in the response:
|
|
|
|
```http
|
|
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
|
|
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
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
All errors will return an appropriate HTTP response code along with the
|
|
following JSON body:
|
|
|
|
```json
|
|
{
|
|
"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
|
|
}
|
|
|
|
```
|
|
|
|
## WebSocket
|
|
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](/#/#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:
|
|
|
|
|
|
```json
|
|
{
|
|
"seq": 1,
|
|
"action": "authentication_challenge",
|
|
"data": {
|
|
"token": "mattermosttokengoeshere"
|
|
}
|
|
}
|
|
```
|
|
|
|
If successful, you will receive a standard OK response over the WebSocket connection:
|
|
|
|
|
|
```json
|
|
{
|
|
"status": "OK",
|
|
"seq_reply": 1
|
|
}
|
|
```
|
|
|
|
Once successfully authenticated, the server will pass a `hello` WebSocket event containing server version over the connection.
|
|
|
|
### Websocket 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:
|
|
|
|
```json
|
|
{
|
|
"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:
|
|
|
|
```json
|
|
{
|
|
"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:
|
|
|
|
|
|
```json
|
|
{
|
|
"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:
|
|
|
|
|
|
```json
|
|
{
|
|
"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).
|
|
|
|
## Drivers
|
|
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-category/mattermost-developers-tools/).
|
|
|
|
## 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, you can:
|
|
|
|
- [Join the Mattermost community server](https://community.mattermost.com) to ask questions in the Developers channel
|
|
|
|
- Contact us at feedback@mattermost.com
|
|
|
|
|
|
[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.
|
|
|
|
version: 4.0.0
|
|
title: Mattermost API
|
|
tags:
|
|
- 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.
|
|
- name: metrics
|
|
description: Endpoints related to metrics, including the Client Performance Monitoring feature.
|
|
- name: audit_logs
|
|
description: Endpoints for managing audit log certificates and configuration.
|
|
- name: ai
|
|
description: Endpoints for interacting with AI agents and services.
|
|
servers:
|
|
- url: "{your-mattermost-url}"
|
|
variables:
|
|
your-mattermost-url:
|
|
default: http://localhost:8065
|
|
paths:
|