OpenAPI Specification
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