Synapse Users API

User account management

OpenAPI Specification

synapse-users-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Synapse Admin Federation Users 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: Users
  description: User account management
paths:
  /v2/users:
    get:
      summary: List All Users
      description: List all local users on the homeserver with optional filtering
      operationId: listUsers
      tags:
      - Users
      parameters:
      - name: user_id
        in: query
        schema:
          type: string
        description: Filter by user ID (prefix match)
      - name: name
        in: query
        schema:
          type: string
        description: Filter by display name or user ID
      - name: guests
        in: query
        schema:
          type: boolean
        description: Include guest accounts
      - name: deactivated
        in: query
        schema:
          type: boolean
        description: Include deactivated accounts
      - name: limit
        in: query
        schema:
          type: integer
          default: 100
        description: Maximum number of results to return
      - name: from
        in: query
        schema:
          type: integer
          default: 0
        description: Offset for pagination
      responses:
        '200':
          description: List of users
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /v2/users/{userId}:
    get:
      summary: Get User Details
      description: Get detailed information about a specific user
      operationId: getUser
      tags:
      - Users
      parameters:
      - name: userId
        in: path
        required: true
        schema:
          type: string
        description: The fully qualified Matrix user ID (e.g. @user:example.com)
      responses:
        '200':
          description: User details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserDetail'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      summary: Create or Modify User
      description: Create a new user account or modify an existing user
      operationId: upsertUser
      tags:
      - Users
      parameters:
      - name: userId
        in: path
        required: true
        schema:
          type: string
        description: The fully qualified Matrix user ID
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserUpsert'
      responses:
        '200':
          description: User updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserDetail'
        '201':
          description: User created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserDetail'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /v1/deactivate/{userId}:
    post:
      summary: Deactivate User Account
      description: Deactivate a user account, optionally erasing their data
      operationId: deactivateUser
      tags:
      - Users
      parameters:
      - name: userId
        in: path
        required: true
        schema:
          type: string
        description: The fully qualified Matrix user ID
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                erase:
                  type: boolean
                  description: Whether to erase all user data
      responses:
        '200':
          description: User deactivated
          content:
            application/json:
              schema:
                type: object
                properties:
                  id_server_unbind_result:
                    type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /v1/reset_password/{userId}:
    post:
      summary: Reset User Password
      description: Reset the password for a local user
      operationId: resetUserPassword
      tags:
      - Users
      parameters:
      - name: userId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - new_password
              properties:
                new_password:
                  type: string
                  description: New password for the user
                logout_devices:
                  type: boolean
                  description: Whether to log out all devices
      responses:
        '200':
          description: Password reset successfully
          content:
            application/json:
              schema:
                type: object
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /v1/users/{userId}/rooms:
    get:
      summary: List User Rooms
      description: List all rooms that a user is a member of
      operationId: listUserRooms
      tags:
      - Users
      parameters:
      - name: userId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: List of rooms the user is in
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoomMembershipList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
components:
  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'
  schemas:
    UserList:
      type: object
      properties:
        users:
          type: array
          items:
            $ref: '#/components/schemas/UserSummary'
        next_token:
          type: integer
        total:
          type: integer
    UserUpsert:
      type: object
      properties:
        password:
          type: string
        displayname:
          type: string
        avatar_url:
          type: string
        admin:
          type: boolean
        deactivated:
          type: boolean
        user_type:
          type: string
    RoomMembershipList:
      type: object
      properties:
        joined_rooms:
          type: array
          items:
            type: string
        total:
          type: integer
    UserDetail:
      allOf:
      - $ref: '#/components/schemas/UserSummary'
      - type: object
        properties:
          threepids:
            type: array
            items:
              type: object
              properties:
                medium:
                  type: string
                address:
                  type: string
          external_ids:
            type: array
            items:
              type: object
          user_type:
            type: string
    UserSummary:
      type: object
      properties:
        name:
          type: string
          description: Matrix user ID
        displayname:
          type: string
        avatar_url:
          type: string
        is_guest:
          type: boolean
        deactivated:
          type: boolean
        erased:
          type: boolean
        shadow_banned:
          type: boolean
        admin:
          type: boolean
        creation_ts:
          type: integer
          format: int64
    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
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: Admin access token obtained from the Synapse homeserver