swagger: '2.0' info: title: "Matrix Client-Server v1 Room Membership API" version: "1.0.0" host: localhost:8008 schemes: - https - http basePath: /_matrix/client/api/v1 consumes: - application/json produces: - application/json securityDefinitions: accessToken: type: apiKey description: The user_id or application service access_token name: access_token in: query paths: "/rooms/{roomId}/join": post: summary: Start the requesting user participating in a particular room. description: |- This API starts a user participating in a particular room, if that user is allowed to participate in that room. After this call, the client is allowed to see all current state events in the room, and all subsequent events associated with the room until the user leaves the room. After a user has joined a room, the room will appear as an entry in the response of the |initialSync| API. security: - accessToken: [] parameters: - in: path type: string name: roomId description: The room identifier or room alias to join. required: true x-example: "#monkeys:matrix.org" responses: 200: description: |- The room has been joined. The joined room ID must be returned in the ``room_id`` field. examples: application/json: |- {"room_id": "!d41d8cd:matrix.org"} schema: type: object 403: description: |- You do not have permission to join the room. A meaningful ``errcode`` and description error text will be returned. Example reasons for rejection are: - The room is invite-only and the user was not invited. - The user has been banned from the room. examples: application/json: |- {"errcode": "M_FORBIDDEN", "error": "You are not invited to this room."} 429: description: This request was rate-limited. schema: "$ref": "definitions/error.yaml" x-alias: canonical-link: "post-matrix-client-api-v1-rooms-roomid-join" aliases: - /join/{roomId} # With an extra " " to disambiguate from the 3pid invite endpoint # The extra space makes it sort first for what I'm sure is a good reason. "/rooms/{roomId}/invite ": post: summary: Invite a user to participate in a particular room. description: |- *Note that there are two forms of this API, which are documented separately. This version of the API requires that the inviter knows the Matrix identifier of the invitee.* This API invites a user to participate in a particular room. They do not start participating in the room until they actually join the room. Only users currently in a particular room can invite other users to join that room. If the user was invited to the room, the home server will append a ``m.room.member`` event to the room. security: - accessToken: [] parameters: - in: path type: string name: roomId description: The room identifier (not alias) to which to invite the user. required: true x-example: "!d41d8cd:matrix.org" - in: body name: body required: true schema: type: object example: |- { "user_id": "@cheeky_monkey:matrix.org" } properties: user_id: type: string description: The fully qualified user ID of the invitee. required: ["user_id"] responses: 200: description: The user has been invited to join the room. examples: application/json: |- {} schema: type: object 403: description: |- You do not have permission to invite the user to the room. A meaningful ``errcode`` and description error text will be returned. Example reasons for rejections are: - The invitee has been banned from the room. - The invitee is already a member of the room. - The inviter is not currently in the room. - The inviter's power level is insufficient to invite users to the room. examples: application/json: |- {"errcode": "M_FORBIDDEN", "error": "@cheeky_monkey:matrix.org is banned from the room"} 429: description: This request was rate-limited. schema: "$ref": "definitions/error.yaml" "/rooms/{roomId}/invite": post: summary: Invite a user to participate in a particular room. description: |- *Note that there are two forms of this API, which are documented separately. This version of the API does not require that the inviter know the Matrix identifier of the invitee, and instead relies on third party identifiers. The homeserver uses an identity server to perform the mapping from third party identifier to a Matrix identifier.* This API invites a user to participate in a particular room. They do not start participating in the room until they actually join the room. Only users currently in a particular room can invite other users to join that room. If the identity server did know the Matrix user identifier for the third party identifier, the home server will append a ``m.room.member`` event to the room. If the identity server does not know a Matrix user identifier for the passed third party identifier, the homeserver will issue an invitation which can be accepted upon providing proof of ownership of the third party identifier. This is achieved by the identity server generating a token, which it gives to the inviting homeserver. The homeserver will add an ``m.room.third_party_invite`` event into the graph for the room, containing that token. When the invitee binds the invited third party identifier to a Matrix user ID, the identity server will give the user a list of pending invitations, each containing: - The room ID to which they were invited - The token given to the homeserver - A signature of the token, signed with the identity server's private key - The matrix user ID who invited them to the room If a token is requested from the identity server, the home server will append a ``m.room.third_party_invite`` event to the room. security: - accessToken: [] parameters: - in: path type: string name: roomId description: The room identifier (not alias) to which to invite the user. required: true x-example: "!d41d8cd:matrix.org" - in: body name: body required: true schema: type: object example: |- { "id_server": "matrix.org", "medium": "email", "address": "cheeky@monkey.com", "display_name": "A very cheeky monkey" } properties: id_server: type: string description: The hostname+port of the identity server which should be used for third party identifier lookups. medium: type: string # TODO: Link to identity service spec when it eixsts description: The kind of address being passed in the address field, for example ``email``. address: type: string description: The invitee's third party identifier. display_name: type: string description: A user-friendly string describing who has been invited. It should not contain the address of the invitee, to avoid leaking mappings between third party identities and matrix user IDs. required: ["id_server", "medium", "address", "display_name"] responses: 200: description: The user has been invited to join the room. examples: application/json: |- {} schema: type: object 403: description: |- You do not have permission to invite the user to the room. A meaningful ``errcode`` and description error text will be returned. Example reasons for rejections are: - The invitee has been banned from the room. - The invitee is already a member of the room. - The inviter is not currently in the room. - The inviter's power level is insufficient to invite users to the room. examples: application/json: |- {"errcode": "M_FORBIDDEN", "error": "@cheeky_monkey:matrix.org is banned from the room"} 429: description: This request was rate-limited. schema: "$ref": "definitions/error.yaml"