Synapse Rooms API

Room administration and membership

OpenAPI Specification

synapse-rooms-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Synapse Admin Federation Rooms API
  description: Administrative REST API for the Synapse Matrix homeserver. Provides server administrators with endpoints to manage users, rooms, media, federation, registration tokens, background updates, event reports, and server statistics. Authentication requires an access token belonging to a server admin account, passed as a Bearer token. Admin API endpoints should be protected behind a reverse proxy.
  version: '1.0'
  contact:
    name: Element (Synapse maintainers)
    url: https://github.com/element-hq/synapse
  license:
    name: AGPL-3.0
    url: https://github.com/element-hq/synapse/blob/develop/LICENSE
servers:
- url: https://matrix.example.com/_synapse/admin
  description: Synapse Admin API base URL
security:
- BearerAuth: []
tags:
- name: Rooms
  description: Room administration and membership
paths:
  /v1/rooms:
    get:
      summary: List All Rooms
      description: List all rooms on the homeserver with optional filtering and sorting
      operationId: listRooms
      tags:
      - Rooms
      parameters:
      - name: search_term
        in: query
        schema:
          type: string
        description: Filter rooms by room ID, name, or canonical alias
      - name: order_by
        in: query
        schema:
          type: string
          enum:
          - alphabetical
          - size
          - joined_members
          - joined_local_members
          - version
          - creator
          - encryption
          - federatable
          - public
          - join_rules
          - guest_access
          - history_visibility
          - state_events
        description: Sort order for results
      - name: dir
        in: query
        schema:
          type: string
          enum:
          - f
          - b
        description: Sort direction (forward/backward)
      - name: limit
        in: query
        schema:
          type: integer
          default: 100
      - name: from
        in: query
        schema:
          type: integer
          default: 0
      responses:
        '200':
          description: List of rooms
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoomList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /v1/rooms/{roomId}:
    get:
      summary: Get Room Details
      description: Get details about a specific room
      operationId: getRoom
      tags:
      - Rooms
      parameters:
      - name: roomId
        in: path
        required: true
        schema:
          type: string
        description: The room ID (e.g. !abc123:example.com)
      responses:
        '200':
          description: Room details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoomDetail'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      summary: Delete Room
      description: Delete a room and all its messages from the homeserver
      operationId: deleteRoom
      tags:
      - Rooms
      parameters:
      - name: roomId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                new_room_user_id:
                  type: string
                  description: User to create a shadow room for displaced members
                room_name:
                  type: string
                  description: Name for the replacement room
                message:
                  type: string
                  description: Message sent to users before deletion
                block:
                  type: boolean
                  description: Block the room from being recreated
                purge:
                  type: boolean
                  description: Purge all messages from the database
      responses:
        '200':
          description: Room deletion initiated
          content:
            application/json:
              schema:
                type: object
                properties:
                  delete_id:
                    type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /v1/rooms/{roomId}/members:
    get:
      summary: Get Room Members
      description: List all members of a room
      operationId: getRoomMembers
      tags:
      - Rooms
      parameters:
      - name: roomId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Room member list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoomMemberList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /v1/join/{roomIdOrAlias}:
    post:
      summary: Join User to Room
      description: Force a local user to join a room
      operationId: joinUserToRoom
      tags:
      - Rooms
      parameters:
      - name: roomIdOrAlias
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - user_id
              properties:
                user_id:
                  type: string
                  description: The Matrix user ID to join
      responses:
        '200':
          description: User joined room
          content:
            application/json:
              schema:
                type: object
                properties:
                  room_id:
                    type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
components:
  schemas:
    RoomList:
      type: object
      properties:
        rooms:
          type: array
          items:
            $ref: '#/components/schemas/RoomSummary'
        offset:
          type: integer
        next_batch:
          type: integer
        prev_batch:
          type: integer
        total_rooms:
          type: integer
    RoomSummary:
      type: object
      properties:
        room_id:
          type: string
        name:
          type: string
        canonical_alias:
          type: string
        joined_members:
          type: integer
        joined_local_members:
          type: integer
        version:
          type: string
        creator:
          type: string
        encryption:
          type: string
          nullable: true
        federatable:
          type: boolean
        public:
          type: boolean
        join_rules:
          type: string
        guest_access:
          type: string
          nullable: true
        history_visibility:
          type: string
        state_events:
          type: integer
    RoomMemberList:
      type: object
      properties:
        members:
          type: array
          items:
            type: string
        total:
          type: integer
    Error:
      type: object
      properties:
        errcode:
          type: string
          description: Matrix error code (e.g. M_FORBIDDEN, M_NOT_FOUND)
        error:
          type: string
          description: Human-readable error description
    RoomDetail:
      allOf:
      - $ref: '#/components/schemas/RoomSummary'
      - type: object
        properties:
          room_type:
            type: string
            nullable: true
          forgotten:
            type: boolean
  responses:
    BadRequest:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Unauthorized - missing or invalid access token
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: Forbidden - requires server admin access
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: Admin access token obtained from the Synapse homeserver