# Copyright 2016 OpenMarket Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
swagger: '2.0'
info:
  title: "Matrix Client-Server Room Joining API"
  version: "1.0.0"
host: localhost:8008
schemes:
  - https
  - http
basePath: /_matrix/client/v3
consumes:
  - application/json
produces:
  - application/json
securityDefinitions:
  $ref: definitions/security.yaml
paths:
  # 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. The other is documented in the*
        [third party invites section](/client-server-api/#post_matrixclientv3roomsroomidinvite-1).

        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 homeserver will append a
        `m.room.member` event to the room.

      operationId: inviteUser
      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",
              "reason": "Welcome to the team!"
            }
            properties:
              user_id:
                type: string
                description: The fully qualified user ID of the invitee.
              reason:
                x-addedInMatrixVersion: "1.1"
                type: string
                description: |-
                  Optional reason to be included as the `reason` on the subsequent
                  membership event.
            required: ["user_id"]
      responses:
        200:
          description: The user has been invited to join the room.
          examples:
            application/json: {
              }
          schema:
            type: object
        400:
          description: |-

            The request is invalid. A meaningful `errcode` and description
            error text will be returned. Example reasons for rejection include:

            - The request body is malformed (`errcode` set to `M_BAD_JSON`
              or `M_NOT_JSON`).

            - One or more users being invited to the room are residents of a
              homeserver which does not support the requested room version. The
              `errcode` will be `M_UNSUPPORTED_ROOM_VERSION` in these cases.
          schema:
            "$ref": "definitions/errors/error.yaml"
        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"}
          schema:
            "$ref": "definitions/errors/error.yaml"
        429:
          description: This request was rate-limited.
          schema:
            "$ref": "definitions/errors/rate_limited.yaml"
      tags:
        - Room membership
