From 96534a1384220b860fcebb08e0b3f54f49dc8670 Mon Sep 17 00:00:00 2001 From: Kierre Date: Sun, 22 Feb 2026 17:11:58 -0500 Subject: [PATCH 1/8] Remove /v1/send_join and /v1/send_leave --- content/server-server-api.md | 4 - data/api/server-server/joins-v1.yaml | 406 ------------------------- data/api/server-server/leaving-v1.yaml | 267 ---------------- 3 files changed, 677 deletions(-) delete mode 100644 data/api/server-server/joins-v1.yaml delete mode 100644 data/api/server-server/leaving-v1.yaml diff --git a/content/server-server-api.md b/content/server-server-api.md index 1ab7e3ba..f0a81079 100644 --- a/content/server-server-api.md +++ b/content/server-server-api.md @@ -881,8 +881,6 @@ the full set of state for the newly-joined room as well as the freshly signed membership event. The resident server must also send the event to other servers participating in the room. -{{% http-api spec="server-server" api="joins-v1" %}} - {{% http-api spec="server-server" api="joins-v2" %}} ### Restricted rooms @@ -977,8 +975,6 @@ and replaces the `event_id` with its own. This is then sent to the resident server via `/send_leave`. The resident server will then send the event to other servers in the room. -{{% http-api spec="server-server" api="leaving-v1" %}} - {{% http-api spec="server-server" api="leaving-v2" %}} ## Third-party invites diff --git a/data/api/server-server/joins-v1.yaml b/data/api/server-server/joins-v1.yaml deleted file mode 100644 index de671ef9..00000000 --- a/data/api/server-server/joins-v1.yaml +++ /dev/null @@ -1,406 +0,0 @@ -# Copyright 2018 New Vector Ltd -# Copyright 2020 The Matrix.org Foundation C.I.C. -# -# 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 Federation Join Room API - version: 1.0.0 -paths: - "/make_join/{roomId}/{userId}": - get: - summary: Get information required to make a join event for a room - description: |- - Asks the receiving server to return information that the sending - server will need to prepare a join event to get into the room. - operationId: makeJoin - security: - - signedRequest: [] - parameters: - - in: path - name: roomId - description: The room ID that is about to be joined. - required: true - example: "!abc123:matrix.org" - schema: - type: string - - in: path - name: userId - description: The user ID the join event will be for. - required: true - example: "@someone:example.org" - schema: - type: string - - in: query - name: ver - description: |- - The room versions the sending server has support for. Defaults - to `[1]`. - example: - - "1" - - "2" - schema: - type: array - items: - type: string - responses: - "200": - description: |- - A template to be used for the rest of the [Joining Rooms](/server-server-api/#joining-rooms) handshake. Note that - events have a different format depending on the room version - check the - [room version specification](/rooms) for precise event formats. **The response body - here describes the common event fields in more detail and may be missing other - required fields for a PDU.** - content: - application/json: - schema: - type: object - properties: - room_version: - type: string - description: |- - The version of the room where the server is trying to join. If not provided, - the room version is assumed to be either "1" or "2". - example: "2" - event: - description: |- - An unsigned template event. Note that events have a different format - depending on the room version - check the [room version specification](/rooms) - for precise event formats. - type: object - title: Event Template - properties: - sender: - type: string - description: The user ID of the joining member. - example: "@someone:example.org" - origin: - type: string - description: The name of the resident homeserver. - example: matrix.org - origin_server_ts: - type: integer - format: int64 - description: A timestamp added by the resident homeserver. - example: 1234567890 - type: - type: string - description: The value `m.room.member`. - example: m.room.member - state_key: - type: string - description: The user ID of the joining member. - example: "@someone:example.org" - content: - type: object - title: Membership Event Content - description: The content of the event. - example: - membership: join - properties: - membership: - type: string - description: The value `join`. - example: join - join_authorised_via_users_server: - type: string - x-addedInMatrixVersion: "1.2" - description: |- - Required if the room is [restricted](/client-server-api/#restricted-rooms) - and is joining through one of the conditions available. If the - user is responding to an invite, this is not required. - - An arbitrary user ID belonging to the resident server in - the room being joined that is able to issue invites to other - users. This is used in later validation of the auth rules for - the `m.room.member` event. - required: - - membership - required: - - state_key - - origin - - origin_server_ts - - type - - content - - sender - examples: - response: - value: { - "room_version": "2", - "event": { - "room_id": "!somewhere:example.org", - "type": "m.room.member", - "state_key": "@someone:example.org", - "origin": "example.org", - "origin_server_ts": 1549041175876, - "sender": "@someone:example.org", - "content": { - "membership": "join", - "join_authorised_via_users_server": "@anyone:resident.example.org" - } - } - } - "400": - description: |- - The request is invalid, the room the server is attempting - to join has a version that is not listed in the `ver` - parameters, or the server was unable to validate - [restricted room conditions](/server-server-api/#restricted-rooms). - - The error should be passed through to clients so that they - may give better feedback to users. - - New in `v1.2`, the following error conditions might happen: - - If the room is [restricted](/client-server-api/#restricted-rooms) - and none of the conditions can be validated by the server then - the `errcode` `M_UNABLE_TO_AUTHORISE_JOIN` must be used. This can - happen if the server does not know about any of the rooms listed - as conditions, for example. - - `M_UNABLE_TO_GRANT_JOIN` is returned to denote that a different - server should be attempted for the join. This is typically because - the resident server can see that the joining user satisfies one or - more conditions, such as in the case of - [restricted rooms](/client-server-api/#restricted-rooms), but the - resident server would be unable to meet the auth rules governing - `join_authorised_via_users_server` on the resulting `m.room.member` - event. - content: - application/json: - schema: - allOf: - - $ref: ../client-server/definitions/errors/error.yaml - - type: object - properties: - room_version: - type: string - description: |- - The version of the room. Required if the `errcode` - is `M_INCOMPATIBLE_ROOM_VERSION`. - examples: - response: - value: { - "errcode": "M_INCOMPATIBLE_ROOM_VERSION", - "error": "Your homeserver does not support the features required to join this room", - "room_version": "3" - } - "403": - description: |- - The room that the joining server is attempting to join does not permit the user - to join. - content: - application/json: - schema: - $ref: ../client-server/definitions/errors/error.yaml - examples: - response: - value: { - "errcode": "M_FORBIDDEN", - "error": "You are not invited to this room" - } - "404": - description: |- - The room that the joining server is attempting to join is unknown - to the receiving server. - content: - application/json: - schema: - $ref: ../client-server/definitions/errors/error.yaml - examples: - response: - value: { - "errcode": "M_NOT_FOUND", - "error": "Unknown room" - } - "/send_join/{roomId}/{eventId}": - put: - deprecated: true - summary: Submit a signed join event to a resident server - description: |- - **Note:** - Servers should instead prefer to use the v2 `/send_join` endpoint. - - Submits a signed join event to the resident server for it - to accept it into the room's graph. Note that events have - a different format depending on the room version - check - the [room version specification](/rooms) for precise event formats. - **The request and response body here describe the common - event fields in more detail and may be missing other required - fields for a PDU.** - operationId: sendJoinV1 - security: - - signedRequest: [] - parameters: - - in: path - name: roomId - description: The room ID that is about to be joined. - required: true - example: "!abc123:matrix.org" - schema: - type: string - - in: path - name: eventId - description: The event ID for the join event. - required: true - example: $abc123:example.org - schema: - type: string - requestBody: - content: - application/json: - schema: - type: object - properties: - sender: - type: string - description: The user ID of the joining member. - example: "@someone:example.org" - origin: - type: string - description: The name of the joining homeserver. - example: matrix.org - origin_server_ts: - type: integer - format: int64 - description: A timestamp added by the joining homeserver. - example: 1234567890 - type: - type: string - description: The value `m.room.member`. - example: m.room.member - state_key: - type: string - description: The user ID of the joining member. - example: "@someone:example.org" - content: - type: object - title: Membership Event Content - description: The content of the event. - example: - membership: join - properties: - membership: - type: string - description: The value `join`. - example: join - join_authorised_via_users_server: - type: string - x-addedInMatrixVersion: "1.2" - description: |- - Required if the room is [restricted](/client-server-api/#restricted-rooms) - and is joining through one of the conditions available. If the - user is responding to an invite, this is not required. - - An arbitrary user ID belonging to the resident server in - the room being joined that is able to issue invites to other - users. This is used in later validation of the auth rules for - the `m.room.member` event. - - The resident server which owns the provided user ID must have a - valid signature on the event. If the resident server is receiving - the `/send_join` request, the signature must be added before sending - or persisting the event to other servers. - required: - - membership - required: - - state_key - - sender - - origin - - origin_server_ts - - type - - content - required: true - responses: - "200": - description: The join event has been accepted into the room. - content: - application/json: - schema: - type: array - minItems: 2 - maxItems: 2 - items: - anyOf: - - type: integer - description: The value `200`. - example: 200 - - type: object - title: Room State - description: The state for the room. - properties: - auth_chain: - type: array - description: |- - The auth chain for the entire current room state prior to the join event. - - Note that events have a different format depending on the room version - check the - [room version specification](/rooms) for precise event formats. - items: - type: object - title: PDU - description: |- - The [PDUs](/server-server-api/#pdus) that make up the auth chain. The event format varies depending - on the room version - check the [room version specification](/rooms) for precise event formats. - state: - type: array - description: |- - The resolved current room state prior to the join event. - - The event format varies depending on the room version - check the [room version specification](/rooms) - for precise event formats. - items: - type: object - title: PDU - description: |- - The [PDUs](/server-server-api/#pdus) for the fully resolved state of the room. The event format varies depending - on the room version - check the [room version specification](/rooms) for precise event formats. - required: - - auth_chain - - state - examples: - response: - value: [ - 200, - { - "auth_chain": [ - { - "$ref": "examples/minimal_pdu.json" - } - ], - "state": [ - { - "$ref": "examples/minimal_pdu.json" - } - ], - "event": { - "$ref": "examples/pdu_v4_join_membership.json" - } - } - ] -servers: - - url: "{protocol}://{hostname}{basePath}" - variables: - protocol: - enum: - - http - - https - default: https - hostname: - default: localhost:8448 - basePath: - default: /_matrix/federation/v1 -components: - securitySchemes: - signedRequest: - $ref: definitions/security.yaml#/signedRequest diff --git a/data/api/server-server/leaving-v1.yaml b/data/api/server-server/leaving-v1.yaml deleted file mode 100644 index a630f6d7..00000000 --- a/data/api/server-server/leaving-v1.yaml +++ /dev/null @@ -1,267 +0,0 @@ -# Copyright 2018 New Vector Ltd -# Copyright 2020 The Matrix.org Foundation C.I.C. -# -# 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 Federation Leave Room API - version: 1.0.0 -paths: - "/make_leave/{roomId}/{userId}": - get: - summary: Get information required to make a leave event for a room - description: |- - Asks the receiving server to return information that the sending - server will need to prepare a leave event to get out of the room. - operationId: makeLeave - security: - - signedRequest: [] - parameters: - - in: path - name: roomId - description: The room ID that is about to be left. - required: true - example: "!abc123:matrix.org" - schema: - type: string - - in: path - name: userId - description: The user ID the leave event will be for. - required: true - example: "@someone:example.org" - schema: - type: string - responses: - "200": - description: |- - A template to be used to call `/send_leave`. Note that - events have a different format depending on the room version - check the - [room version specification](/rooms) for precise event formats. **The response body - here describes the common event fields in more detail and may be missing other - required fields for a PDU.** - content: - application/json: - schema: - type: object - properties: - room_version: - type: string - description: |- - The version of the room where the server is trying to leave. If not provided, - the room version is assumed to be either "1" or "2". - example: "2" - event: - description: |- - An unsigned template event. Note that events have a different format - depending on the room version - check the [room version specification](/rooms) - for precise event formats. - type: object - title: Event Template - properties: - sender: - type: string - description: The user ID of the leaving member. - example: "@someone:example.org" - origin: - type: string - description: The name of the resident homeserver. - example: matrix.org - origin_server_ts: - type: integer - format: int64 - description: A timestamp added by the resident homeserver. - example: 1234567890 - type: - type: string - description: The value `m.room.member`. - example: m.room.member - state_key: - type: string - description: The user ID of the leaving member. - example: "@someone:example.org" - content: - type: object - title: Membership Event Content - description: The content of the event. - example: - membership: leave - properties: - membership: - type: string - description: The value `leave`. - example: leave - required: - - membership - required: - - state_key - - sender - - origin - - origin_server_ts - - type - - content - examples: - response: - value: { - "room_version": "2", - "event": { - "room_id": "!somewhere:example.org", - "type": "m.room.member", - "state_key": "@someone:example.org", - "origin": "example.org", - "origin_server_ts": 1549041175876, - "sender": "@someone:example.org", - "content": { - "membership": "leave" - } - } - } - "403": - description: The request is not authorized. This could mean that the user is not - in the room. - content: - application/json: - schema: - $ref: ../client-server/definitions/errors/error.yaml - examples: - response: - value: { - "errcode": "M_FORBIDDEN", - "error": "User is not in the room." - } - "/send_leave/{roomId}/{eventId}": - put: - deprecated: true - summary: Submit a signed leave event to a resident server - description: |- - **Note:** - Servers should instead prefer to use the v2 `/send_leave` endpoint. - - Submits a signed leave event to the resident server for it - to accept it into the room's graph. Note that events have - a different format depending on the room version - check - the [room version specification](/rooms) for precise event formats. - **The request and response body here describe the common - event fields in more detail and may be missing other required - fields for a PDU.** - operationId: sendLeaveV1 - security: - - signedRequest: [] - parameters: - - in: path - name: roomId - description: The room ID that is about to be left. - required: true - example: "!abc123:matrix.org" - schema: - type: string - - in: path - name: eventId - description: The event ID for the leave event. - required: true - example: $abc123:example.org - schema: - type: string - requestBody: - content: - application/json: - schema: - type: object - properties: - sender: - type: string - description: The user ID of the leaving member. - example: "@someone:example.org" - origin: - type: string - description: The name of the leaving homeserver. - example: matrix.org - origin_server_ts: - type: integer - format: int64 - description: A timestamp added by the leaving homeserver. - example: 1234567890 - type: - type: string - description: The value `m.room.member`. - example: m.room.member - state_key: - type: string - description: The user ID of the leaving member. - example: "@someone:example.org" - content: - type: object - title: Membership Event Content - description: The content of the event. - example: - membership: leave - properties: - membership: - type: string - description: The value `leave`. - example: leave - required: - - membership - depth: - type: integer - description: This field must be present but is ignored; it may be 0. - example: 12 - required: - - state_key - - sender - - origin - - origin_server_ts - - type - - depth - - content - required: true - responses: - "200": - description: |- - An empty response to indicate the event was accepted into the graph by - the receiving homeserver. - content: - application/json: - schema: - type: array - minItems: 2 - maxItems: 2 - items: - anyOf: - - type: integer - description: The value `200`. - example: 200 - - type: object - title: Empty Object - description: An empty object. - examples: - response: - value: [ - 200, - {} - ] -servers: - - url: "{protocol}://{hostname}{basePath}" - variables: - protocol: - enum: - - http - - https - default: https - hostname: - default: localhost:8448 - basePath: - default: /_matrix/federation/v1 -components: - securitySchemes: - signedRequest: - $ref: definitions/security.yaml#/signedRequest From 850ccee40f60e38f20acce23fa402fe85cb86261 Mon Sep 17 00:00:00 2001 From: Kierre Date: Sun, 22 Feb 2026 17:15:37 -0500 Subject: [PATCH 2/8] newsfragment --- changelogs/server_server/newsfragments/2319.removal | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelogs/server_server/newsfragments/2319.removal diff --git a/changelogs/server_server/newsfragments/2319.removal b/changelogs/server_server/newsfragments/2319.removal new file mode 100644 index 00000000..7f17380e --- /dev/null +++ b/changelogs/server_server/newsfragments/2319.removal @@ -0,0 +1 @@ +Remove `/v1/send_join` and `/v1/send_leave`, as per [MSC4376](https://github.com/matrix-org/matrix-spec-proposals/pull/4376). \ No newline at end of file From 86eb22aafd6ea696babf2ad9272ab5255d980b64 Mon Sep 17 00:00:00 2001 From: Kierre Date: Sun, 22 Feb 2026 17:28:03 -0500 Subject: [PATCH 3/8] add back make_join oops --- data/api/server-server/joins-v1.yaml | 241 +++++++++++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100644 data/api/server-server/joins-v1.yaml diff --git a/data/api/server-server/joins-v1.yaml b/data/api/server-server/joins-v1.yaml new file mode 100644 index 00000000..49362b14 --- /dev/null +++ b/data/api/server-server/joins-v1.yaml @@ -0,0 +1,241 @@ +# Copyright 2018 New Vector Ltd +# Copyright 2020 The Matrix.org Foundation C.I.C. +# +# 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 Federation Join Room API + version: 1.0.0 +paths: + "/make_join/{roomId}/{userId}": + get: + summary: Get information required to make a join event for a room + description: |- + Asks the receiving server to return information that the sending + server will need to prepare a join event to get into the room. + operationId: makeJoin + security: + - signedRequest: [] + parameters: + - in: path + name: roomId + description: The room ID that is about to be joined. + required: true + example: "!abc123:matrix.org" + schema: + type: string + - in: path + name: userId + description: The user ID the join event will be for. + required: true + example: "@someone:example.org" + schema: + type: string + - in: query + name: ver + description: |- + The room versions the sending server has support for. Defaults + to `[1]`. + example: + - "1" + - "2" + schema: + type: array + items: + type: string + responses: + "200": + description: |- + A template to be used for the rest of the [Joining Rooms](/server-server-api/#joining-rooms) handshake. Note that + events have a different format depending on the room version - check the + [room version specification](/rooms) for precise event formats. **The response body + here describes the common event fields in more detail and may be missing other + required fields for a PDU.** + content: + application/json: + schema: + type: object + properties: + room_version: + type: string + description: |- + The version of the room where the server is trying to join. If not provided, + the room version is assumed to be either "1" or "2". + example: "2" + event: + description: |- + An unsigned template event. Note that events have a different format + depending on the room version - check the [room version specification](/rooms) + for precise event formats. + type: object + title: Event Template + properties: + sender: + type: string + description: The user ID of the joining member. + example: "@someone:example.org" + origin: + type: string + description: The name of the resident homeserver. + example: matrix.org + origin_server_ts: + type: integer + format: int64 + description: A timestamp added by the resident homeserver. + example: 1234567890 + type: + type: string + description: The value `m.room.member`. + example: m.room.member + state_key: + type: string + description: The user ID of the joining member. + example: "@someone:example.org" + content: + type: object + title: Membership Event Content + description: The content of the event. + example: + membership: join + properties: + membership: + type: string + description: The value `join`. + example: join + join_authorised_via_users_server: + type: string + x-addedInMatrixVersion: "1.2" + description: |- + Required if the room is [restricted](/client-server-api/#restricted-rooms) + and is joining through one of the conditions available. If the + user is responding to an invite, this is not required. + + An arbitrary user ID belonging to the resident server in + the room being joined that is able to issue invites to other + users. This is used in later validation of the auth rules for + the `m.room.member` event. + required: + - membership + required: + - state_key + - origin + - origin_server_ts + - type + - content + - sender + examples: + response: + value: { + "room_version": "2", + "event": { + "room_id": "!somewhere:example.org", + "type": "m.room.member", + "state_key": "@someone:example.org", + "origin": "example.org", + "origin_server_ts": 1549041175876, + "sender": "@someone:example.org", + "content": { + "membership": "join", + "join_authorised_via_users_server": "@anyone:resident.example.org" + } + } + } + "400": + description: |- + The request is invalid, the room the server is attempting + to join has a version that is not listed in the `ver` + parameters, or the server was unable to validate + [restricted room conditions](/server-server-api/#restricted-rooms). + + The error should be passed through to clients so that they + may give better feedback to users. + + New in `v1.2`, the following error conditions might happen: + + If the room is [restricted](/client-server-api/#restricted-rooms) + and none of the conditions can be validated by the server then + the `errcode` `M_UNABLE_TO_AUTHORISE_JOIN` must be used. This can + happen if the server does not know about any of the rooms listed + as conditions, for example. + + `M_UNABLE_TO_GRANT_JOIN` is returned to denote that a different + server should be attempted for the join. This is typically because + the resident server can see that the joining user satisfies one or + more conditions, such as in the case of + [restricted rooms](/client-server-api/#restricted-rooms), but the + resident server would be unable to meet the auth rules governing + `join_authorised_via_users_server` on the resulting `m.room.member` + event. + content: + application/json: + schema: + allOf: + - $ref: ../client-server/definitions/errors/error.yaml + - type: object + properties: + room_version: + type: string + description: |- + The version of the room. Required if the `errcode` + is `M_INCOMPATIBLE_ROOM_VERSION`. + examples: + response: + value: { + "errcode": "M_INCOMPATIBLE_ROOM_VERSION", + "error": "Your homeserver does not support the features required to join this room", + "room_version": "3" + } + "403": + description: |- + The room that the joining server is attempting to join does not permit the user + to join. + content: + application/json: + schema: + $ref: ../client-server/definitions/errors/error.yaml + examples: + response: + value: { + "errcode": "M_FORBIDDEN", + "error": "You are not invited to this room" + } + "404": + description: |- + The room that the joining server is attempting to join is unknown + to the receiving server. + content: + application/json: + schema: + $ref: ../client-server/definitions/errors/error.yaml + examples: + response: + value: { + "errcode": "M_NOT_FOUND", + "error": "Unknown room" + } +servers: + - url: "{protocol}://{hostname}{basePath}" + variables: + protocol: + enum: + - http + - https + default: https + hostname: + default: localhost:8448 + basePath: + default: /_matrix/federation/v1 +components: + securitySchemes: + signedRequest: + $ref: definitions/security.yaml#/signedRequest \ No newline at end of file From 114e8041272b70b6a1798bfd7ebb81f08c86423d Mon Sep 17 00:00:00 2001 From: Kierre Date: Sun, 22 Feb 2026 17:31:08 -0500 Subject: [PATCH 4/8] a --- content/server-server-api.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/server-server-api.md b/content/server-server-api.md index f0a81079..f6c4b4e7 100644 --- a/content/server-server-api.md +++ b/content/server-server-api.md @@ -881,6 +881,8 @@ the full set of state for the newly-joined room as well as the freshly signed membership event. The resident server must also send the event to other servers participating in the room. +{{% http-api spec="server-server" api="joins-v1" %}} + {{% http-api spec="server-server" api="joins-v2" %}} ### Restricted rooms From 8e209816c7b9ce5835fc743dd9b62e8180478559 Mon Sep 17 00:00:00 2001 From: Kierre Date: Sun, 22 Feb 2026 17:47:55 -0500 Subject: [PATCH 5/8] remove mentions of those endpoints --- data/api/server-server/joins-v2.yaml | 9 --------- data/api/server-server/leaving-v2.yaml | 9 --------- 2 files changed, 18 deletions(-) diff --git a/data/api/server-server/joins-v2.yaml b/data/api/server-server/joins-v2.yaml index 91e6a83e..aee458e1 100644 --- a/data/api/server-server/joins-v2.yaml +++ b/data/api/server-server/joins-v2.yaml @@ -22,15 +22,6 @@ paths: put: summary: Submit a signed join event to a resident server description: |- - **Note:** - This API is nearly identical to the v1 API with the - exception of the response format being fixed. - - This endpoint is preferred over the v1 API as it provides - a more standardised response format. Senders which receive - a 400, 404, or other status code which indicates this endpoint - is not available should retry using the v1 API instead. - Submits a signed join event to the resident server for it to accept it into the room's graph. Note that events have a different format depending on the room version - check diff --git a/data/api/server-server/leaving-v2.yaml b/data/api/server-server/leaving-v2.yaml index 0db16cbe..3780e5ff 100644 --- a/data/api/server-server/leaving-v2.yaml +++ b/data/api/server-server/leaving-v2.yaml @@ -22,15 +22,6 @@ paths: put: summary: Submit a signed leave event to a resident server description: |- - **Note:** - This API is nearly identical to the v1 API with the - exception of the response format being fixed. - - This endpoint is preferred over the v1 API as it provides - a more standardised response format. Senders which receive - a 400, 404, or other status code which indicates this endpoint - is not available should retry using the v1 API instead. - Submits a signed leave event to the resident server for it to accept it into the room's graph. Note that events have a different format depending on the room version - check From e333a3ffe6f0ff1c72d5592c34615ec9f189dd66 Mon Sep 17 00:00:00 2001 From: Kierre Date: Sun, 22 Feb 2026 18:02:56 -0500 Subject: [PATCH 6/8] fix absence of make_leave I am stupid --- content/server-server-api.md | 2 + data/api/server-server/leaving-v1.yaml | 156 +++++++++++++++++++++++++ 2 files changed, 158 insertions(+) create mode 100644 data/api/server-server/leaving-v1.yaml diff --git a/content/server-server-api.md b/content/server-server-api.md index f6c4b4e7..1ab7e3ba 100644 --- a/content/server-server-api.md +++ b/content/server-server-api.md @@ -977,6 +977,8 @@ and replaces the `event_id` with its own. This is then sent to the resident server via `/send_leave`. The resident server will then send the event to other servers in the room. +{{% http-api spec="server-server" api="leaving-v1" %}} + {{% http-api spec="server-server" api="leaving-v2" %}} ## Third-party invites diff --git a/data/api/server-server/leaving-v1.yaml b/data/api/server-server/leaving-v1.yaml new file mode 100644 index 00000000..339be337 --- /dev/null +++ b/data/api/server-server/leaving-v1.yaml @@ -0,0 +1,156 @@ +# Copyright 2018 New Vector Ltd +# Copyright 2020 The Matrix.org Foundation C.I.C. +# +# 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 Federation Leave Room API + version: 1.0.0 +paths: + "/make_leave/{roomId}/{userId}": + get: + summary: Get information required to make a leave event for a room + description: |- + Asks the receiving server to return information that the sending + server will need to prepare a leave event to get out of the room. + operationId: makeLeave + security: + - signedRequest: [] + parameters: + - in: path + name: roomId + description: The room ID that is about to be left. + required: true + example: "!abc123:matrix.org" + schema: + type: string + - in: path + name: userId + description: The user ID the leave event will be for. + required: true + example: "@someone:example.org" + schema: + type: string + responses: + "200": + description: |- + A template to be used to call `/send_leave`. Note that + events have a different format depending on the room version - check the + [room version specification](/rooms) for precise event formats. **The response body + here describes the common event fields in more detail and may be missing other + required fields for a PDU.** + content: + application/json: + schema: + type: object + properties: + room_version: + type: string + description: |- + The version of the room where the server is trying to leave. If not provided, + the room version is assumed to be either "1" or "2". + example: "2" + event: + description: |- + An unsigned template event. Note that events have a different format + depending on the room version - check the [room version specification](/rooms) + for precise event formats. + type: object + title: Event Template + properties: + sender: + type: string + description: The user ID of the leaving member. + example: "@someone:example.org" + origin: + type: string + description: The name of the resident homeserver. + example: matrix.org + origin_server_ts: + type: integer + format: int64 + description: A timestamp added by the resident homeserver. + example: 1234567890 + type: + type: string + description: The value `m.room.member`. + example: m.room.member + state_key: + type: string + description: The user ID of the leaving member. + example: "@someone:example.org" + content: + type: object + title: Membership Event Content + description: The content of the event. + example: + membership: leave + properties: + membership: + type: string + description: The value `leave`. + example: leave + required: + - membership + required: + - state_key + - sender + - origin + - origin_server_ts + - type + - content + examples: + response: + value: { + "room_version": "2", + "event": { + "room_id": "!somewhere:example.org", + "type": "m.room.member", + "state_key": "@someone:example.org", + "origin": "example.org", + "origin_server_ts": 1549041175876, + "sender": "@someone:example.org", + "content": { + "membership": "leave" + } + } + } + "403": + description: The request is not authorized. This could mean that the user is not + in the room. + content: + application/json: + schema: + $ref: ../client-server/definitions/errors/error.yaml + examples: + response: + value: { + "errcode": "M_FORBIDDEN", + "error": "User is not in the room." + } +servers: + - url: "{protocol}://{hostname}{basePath}" + variables: + protocol: + enum: + - http + - https + default: https + hostname: + default: localhost:8448 + basePath: + default: /_matrix/federation/v1 +components: + securitySchemes: + signedRequest: + $ref: definitions/security.yaml#/signedRequest \ No newline at end of file From b4c61f7907c2cbbeb09a85479e8d0d7ea001804e Mon Sep 17 00:00:00 2001 From: Kierre Date: Sun, 22 Feb 2026 18:05:09 -0500 Subject: [PATCH 7/8] add missing newline --- data/api/server-server/leaving-v1.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/api/server-server/leaving-v1.yaml b/data/api/server-server/leaving-v1.yaml index 339be337..6534c5b4 100644 --- a/data/api/server-server/leaving-v1.yaml +++ b/data/api/server-server/leaving-v1.yaml @@ -153,4 +153,4 @@ servers: components: securitySchemes: signedRequest: - $ref: definitions/security.yaml#/signedRequest \ No newline at end of file + $ref: definitions/security.yaml#/signedRequest From 6ff54e3c7f61220192abc9c593acc14d5e0aa659 Mon Sep 17 00:00:00 2001 From: Kierre Date: Mon, 23 Feb 2026 11:37:44 -0500 Subject: [PATCH 8/8] rerun CI