You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
6.1 KiB
YAML
161 lines
6.1 KiB
YAML
# 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.
|
|
openapi: 3.1.0
|
|
info:
|
|
title: Matrix Client-Server Room Membership API for third-party identifiers
|
|
version: 1.0.0
|
|
paths:
|
|
"/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. The other is documented in the*
|
|
[joining rooms section](/client-server-api/#post_matrixclientv3roomsroomidinvite).
|
|
|
|
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 homeserver 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 homeserver will
|
|
append a `m.room.third_party_invite` event to the room.
|
|
operationId: inviteBy3PID
|
|
security:
|
|
- accessToken: []
|
|
parameters:
|
|
- in: path
|
|
name: roomId
|
|
description: The room identifier (not alias) to which to invite the user.
|
|
required: true
|
|
example: "!d41d8cd:matrix.org"
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
example: {
|
|
"id_server": "matrix.org",
|
|
"id_access_token": "abc123_OpaqueString",
|
|
"medium": "email",
|
|
"address": "cheeky@monkey.com"
|
|
}
|
|
properties:
|
|
id_server:
|
|
type: string
|
|
description: The hostname+port of the identity server which should be used for
|
|
third-party identifier lookups.
|
|
id_access_token:
|
|
type: string
|
|
description: |-
|
|
An access token previously registered with the identity server. Servers
|
|
can treat this as optional to distinguish between r0.5-compatible clients
|
|
and this specification version.
|
|
medium:
|
|
type: string
|
|
description: |-
|
|
The kind of address being passed in the address field, for example
|
|
`email` (see [the list of recognised values](/appendices/#3pid-types)).
|
|
address:
|
|
type: string
|
|
description: The invitee's third-party identifier.
|
|
required:
|
|
- id_server
|
|
- id_access_token
|
|
- medium
|
|
- address
|
|
required: true
|
|
responses:
|
|
"200":
|
|
description: The user has been invited to join the room.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
examples:
|
|
response:
|
|
value: {}
|
|
"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.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: definitions/errors/error.yaml
|
|
examples:
|
|
response:
|
|
value: {
|
|
"errcode": "M_FORBIDDEN",
|
|
"error": "@cheeky_monkey:matrix.org is banned from the room"
|
|
}
|
|
"429":
|
|
description: This request was rate-limited.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: definitions/errors/rate_limited.yaml
|
|
tags:
|
|
- Room membership
|
|
servers:
|
|
- url: "{protocol}://{hostname}{basePath}"
|
|
variables:
|
|
protocol:
|
|
enum:
|
|
- http
|
|
- https
|
|
default: https
|
|
hostname:
|
|
default: localhost:8008
|
|
basePath:
|
|
default: /_matrix/client/v3
|
|
components:
|
|
securitySchemes:
|
|
$ref: definitions/security.yaml
|