Skip to content

Matrix v1.19 Client-Server API Reference

Generated file. Do not edit endpoint rows by hand; regenerate with node scripts/generate-matrix-v119-spec-doc.mjs.

This lists every operation in the v1.19 OpenAPI document. It is a spec reference, not an implementation-status tracker: operations the server does not route are listed in docs/todos/capability-gaps.md.

Source

  • Official OpenAPI document: https://spec.matrix.org/v1.19/client-server-api/
  • Human-readable reference: https://spec.matrix.org/v1.19/client-server-api/
  • OpenAPI: 3.1.0
  • Title: Matrix Client-Server API
  • Version: v1.19
  • Generated: 2026-07-23
  • Source SHA-256: c7fe4072c6810491e436ac8e6dc212c7d653b6ce53b59e4ac752b4664b6f0e68

Summary

  • Paths: 136
  • Operations: 166
  • Tags: 30
Tag Operations
Account management 17
Application service room directory management 1
Capabilities 1
Device management 5
End-to-end encryption 20
Event relationships 3
Media 13
Mutual Rooms 1
OpenID 1
Presence 2
Push notifications 12
Read Markers 1
Reporting content 3
Room creation 1
Room directory 4
Room discovery 4
Room membership 11
Room participation 21
Room upgrades 1
Search 1
Send-to-Device messaging 1
Server administration 9
Session management 9
Spaces 1
Third-party Lookup 6
Threads 1
untagged 3
User data 11
User directory 1
VOIP 1

Account management

Method Path Operation ID Auth Request body Responses
GET /_matrix/client/v1/register/m.login.registration_token/validity registrationTokenValidity none - 200, 403, 429
GET /_matrix/client/v3/account/3pid getAccount3PIDs access token - 200
POST /_matrix/client/v3/account/3pid post3PIDs access token required application/json 200, 403
POST /_matrix/client/v3/account/3pid/add add3PID access token required application/json 200, 400, 401, 429
POST /_matrix/client/v3/account/3pid/bind bind3PID access token required application/json 200, 400, 429
POST /_matrix/client/v3/account/3pid/delete delete3pidFromAccount access token required application/json 200
POST /_matrix/client/v3/account/3pid/email/requestToken requestTokenTo3PIDEmail none required application/json 200, 400, 403
POST /_matrix/client/v3/account/3pid/msisdn/requestToken requestTokenTo3PIDMSISDN none required application/json 200, 400, 403
POST /_matrix/client/v3/account/3pid/unbind unbind3pidFromAccount access token required application/json 200
POST /_matrix/client/v3/account/deactivate deactivateAccount optional required application/json 200, 401, 429
POST /_matrix/client/v3/account/password changePassword optional required application/json 200, 401, 429
POST /_matrix/client/v3/account/password/email/requestToken requestTokenToResetPasswordEmail none required application/json 200, 400, 403
POST /_matrix/client/v3/account/password/msisdn/requestToken requestTokenToResetPasswordMSISDN none required application/json 200, 400, 403
POST /_matrix/client/v3/register register none required application/json 200, 400, 401, 403, 429
GET /_matrix/client/v3/register/available checkUsernameAvailability none - 200, 400, 429
POST /_matrix/client/v3/register/email/requestToken requestTokenToRegisterEmail none required application/json 200, 400, 403
POST /_matrix/client/v3/register/msisdn/requestToken requestTokenToRegisterMSISDN none required application/json 200, 400, 403

Application service room directory management

Method Path Operation ID Auth Request body Responses
PUT /_matrix/client/v3/directory/list/appservice/{networkId}/{roomId} updateAppserviceRoomDirectoryVisibility appservice token required application/json 200

Capabilities

Method Path Operation ID Auth Request body Responses
GET /_matrix/client/v3/capabilities getCapabilities access token - 200, 429

Device management

Method Path Operation ID Auth Request body Responses
POST /_matrix/client/v3/delete_devices deleteDevices access token required application/json 200, 401
GET /_matrix/client/v3/devices getDevices access token - 200
GET /_matrix/client/v3/devices/{deviceId} getDevice access token - 200, 404
PUT /_matrix/client/v3/devices/{deviceId} updateDevice access token required application/json 200, 201, 404
DELETE /_matrix/client/v3/devices/{deviceId} deleteDevice access token required application/json 200, 401

Single-device GET, PUT and password-UIA DELETE extract deviceId from the request path before the query separator. Unrelated query text does not rename the selected device or alter its deletion/session revocation. Authentication and the password-UIA requirement remain unchanged.

End-to-end encryption

Method Path Operation ID Auth Request body Responses
GET /_matrix/client/v3/keys/changes getKeysChanges access token - 200
POST /_matrix/client/v3/keys/claim claimKeys access token required application/json 200
POST /_matrix/client/v3/keys/device_signing/upload uploadCrossSigningKeys access token required application/json 200, 400, 403
POST /_matrix/client/v3/keys/query queryKeys access token required application/json 200
POST /_matrix/client/v3/keys/signatures/upload uploadCrossSigningSignatures access token required application/json 200
POST /_matrix/client/v3/keys/upload uploadKeys access token required application/json 200
GET /_matrix/client/v3/room_keys/keys getRoomKeys access token - 200, 404, 429
PUT /_matrix/client/v3/room_keys/keys putRoomKeys access token required application/json 200, 403, 404, 429
DELETE /_matrix/client/v3/room_keys/keys deleteRoomKeys access token - 200, 404, 429
GET /_matrix/client/v3/room_keys/keys/{roomId} getRoomKeysByRoomId access token - 200, 404, 429
PUT /_matrix/client/v3/room_keys/keys/{roomId} putRoomKeysByRoomId access token required application/json 200, 403, 404, 429
DELETE /_matrix/client/v3/room_keys/keys/{roomId} deleteRoomKeysByRoomId access token - 200, 404, 429
GET /_matrix/client/v3/room_keys/keys/{roomId}/{sessionId} getRoomKeyBySessionId access token - 200, 404, 429
PUT /_matrix/client/v3/room_keys/keys/{roomId}/{sessionId} putRoomKeyBySessionId access token required application/json 200, 403, 429
DELETE /_matrix/client/v3/room_keys/keys/{roomId}/{sessionId} deleteRoomKeyBySessionId access token - 200, 404, 429
GET /_matrix/client/v3/room_keys/version getRoomKeysVersionCurrent access token - 200, 404, 429
POST /_matrix/client/v3/room_keys/version postRoomKeysVersion access token required application/json 200, 429
GET /_matrix/client/v3/room_keys/version/{version} getRoomKeysVersion access token - 200, 404, 429
PUT /_matrix/client/v3/room_keys/version/{version} putRoomKeysVersion access token required application/json 200, 400, 404, 429
DELETE /_matrix/client/v3/room_keys/version/{version} deleteRoomKeysVersion access token - 200, 404, 429

Backup-version DELETE also selects version from the path before ?. Unrelated query text cannot turn a successful deletion into a no-op on the intended version. SQLite regressions check deletion after reopening the store, preservation of another version and repeated deletion; encryption and backed-up session cascade are outside that regression's scope.

Event relationships

Method Path Operation ID Auth Request body Responses
GET /_matrix/client/v1/rooms/{roomId}/relations/{eventId} getRelatingEvents access token - 200, 404
GET /_matrix/client/v1/rooms/{roomId}/relations/{eventId}/{relType} getRelatingEventsWithRelType access token - 200, 404
GET /_matrix/client/v1/rooms/{roomId}/relations/{eventId}/{relType}/{eventType} getRelatingEventsWithRelTypeAndEventType access token - 200, 404

Media

Method Path Operation ID Auth Request body Responses
GET /_matrix/client/v1/media/config getConfigAuthed access token - 200, 429
GET /_matrix/client/v1/media/download/{serverName}/{mediaId} getContentAuthed access token - 200, 307, 308, 429, 502, 504
GET /_matrix/client/v1/media/download/{serverName}/{mediaId}/{fileName} getContentOverrideNameAuthed access token - 200, 307, 308, 429, 502, 504
GET /_matrix/client/v1/media/preview_url getUrlPreviewAuthed access token - 200, 429
GET /_matrix/client/v1/media/thumbnail/{serverName}/{mediaId} getContentThumbnailAuthed access token - 200, 307, 308, 400, 413, 429, 502, 504
POST /_matrix/media/v1/create createContent access token - 200, 403, 429
GET /_matrix/media/v3/config getConfig access token - 200, 429
GET /_matrix/media/v3/download/{serverName}/{mediaId} getContent none - 200, 307, 308, 429, 502, 504
GET /_matrix/media/v3/download/{serverName}/{mediaId}/{fileName} getContentOverrideName none - 200, 307, 308, 429, 502, 504
GET /_matrix/media/v3/preview_url getUrlPreview access token - 200, 429
GET /_matrix/media/v3/thumbnail/{serverName}/{mediaId} getContentThumbnail none - 200, 307, 308, 400, 413, 429, 502, 504
POST /_matrix/media/v3/upload uploadContent access token required application/octet-stream 200, 403, 413, 429
PUT /_matrix/media/v3/upload/{serverName}/{mediaId} uploadContentToMXC access token required application/octet-stream 200, 403, 404, 409, 413, 429

Mutual Rooms

Method Path Operation ID Auth Request body Responses
GET /_matrix/client/v1/mutual_rooms getMutualRooms access token - 200, 400, 429

OpenID

Method Path Operation ID Auth Request body Responses
POST /_matrix/client/v3/user/{userId}/openid/request_token requestOpenIdToken access token required application/json 200, 429

Presence

Method Path Operation ID Auth Request body Responses
GET /_matrix/client/v3/presence/{userId}/status getPresence access token - 200, 403, 404
PUT /_matrix/client/v3/presence/{userId}/status setPresence access token required application/json 200, 429

Push notifications

Method Path Operation ID Auth Request body Responses
GET /_matrix/client/v3/notifications getNotifications access token - 200
GET /_matrix/client/v3/pushers getPushers access token - 200
POST /_matrix/client/v3/pushers/set postPusher access token required application/json 200, 400, 429
GET /_matrix/client/v3/pushrules/ getPushRules access token - 200
GET /_matrix/client/v3/pushrules/global/ getPushRulesGlobal access token - 200
GET /_matrix/client/v3/pushrules/global/{kind}/{ruleId} getPushRule access token - 200, 404
PUT /_matrix/client/v3/pushrules/global/{kind}/{ruleId} setPushRule access token required application/json 200, 400, 404, 429
DELETE /_matrix/client/v3/pushrules/global/{kind}/{ruleId} deletePushRule access token - 200, 404
GET /_matrix/client/v3/pushrules/global/{kind}/{ruleId}/actions getPushRuleActions access token - 200, 404
PUT /_matrix/client/v3/pushrules/global/{kind}/{ruleId}/actions setPushRuleActions access token required application/json 200, 404
GET /_matrix/client/v3/pushrules/global/{kind}/{ruleId}/enabled isPushRuleEnabled access token - 200, 404
PUT /_matrix/client/v3/pushrules/global/{kind}/{ruleId}/enabled setPushRuleEnabled access token required application/json 200, 404

Read Markers

Method Path Operation ID Auth Request body Responses
POST /_matrix/client/v3/rooms/{roomId}/read_markers setReadMarker access token required application/json 200, 429

Reporting content

Method Path Operation ID Auth Request body Responses
POST /_matrix/client/v3/rooms/{roomId}/report reportRoom access token required application/json 200, 404, 429
POST /_matrix/client/v3/rooms/{roomId}/report/{eventId} reportEvent access token required application/json 200, 404
POST /_matrix/client/v3/users/{userId}/report reportUser access token required application/json 200, 404, 429

Room creation

Method Path Operation ID Auth Request body Responses
POST /_matrix/client/v3/createRoom createRoom access token required application/json 200, 400, 403

Room directory

Method Path Operation ID Auth Request body Responses
GET /_matrix/client/v3/directory/room/{roomAlias} getRoomIdByAlias none - 200, 400, 404
PUT /_matrix/client/v3/directory/room/{roomAlias} setRoomAlias access token required application/json 200, 400, 403, 404, 409
DELETE /_matrix/client/v3/directory/room/{roomAlias} deleteRoomAlias access token - 200, 400, 403, 404
GET /_matrix/client/v3/rooms/{roomId}/aliases getLocalAliases access token - 200, 400, 403, 429

Room discovery

Method Path Operation ID Auth Request body Responses
GET /_matrix/client/v3/directory/list/room/{roomId} getRoomVisibilityOnDirectory none - 200, 404
PUT /_matrix/client/v3/directory/list/room/{roomId} setRoomVisibilityOnDirectory access token required application/json 200, 400, 403, 404
GET /_matrix/client/v3/publicRooms getPublicRooms none - 200
POST /_matrix/client/v3/publicRooms queryPublicRooms access token required application/json 200

Implementation note (0.12.16, CSAZ-5): local public-room listings now require explicit directory publication; a public join rule alone does not publish a room. createRoom defaults to private directory visibility, and explicit public visibility publishes it. The existing public-join listing filter is retained. Directory publication is still in-memory, and POST authentication has not yet been enforced; both remain tracked gaps, not completed fixes.

Room membership

Method Path Operation ID Auth Request body Responses
POST /_matrix/client/v3/join/{roomIdOrAlias} joinRoom access token required application/json 200, 403, 429
GET /_matrix/client/v3/joined_rooms getJoinedRooms access token - 200
POST /_matrix/client/v3/knock/{roomIdOrAlias} knockRoom access token required application/json 200, 403, 404, 429
POST /_matrix/client/v3/rooms/{roomId}/ban ban access token required application/json 200, 403
POST /_matrix/client/v3/rooms/{roomId}/forget forgetRoom access token - 200, 400, 429
POST /_matrix/client/v3/rooms/{roomId}/invite inviteBy3PID access token required application/json 200, 403, 429
POST /_matrix/client/v3/rooms/{roomId}/invite inviteUser access token required application/json 200, 400, 403, 429
POST /_matrix/client/v3/rooms/{roomId}/join joinRoomById access token required application/json 200, 403, 429
POST /_matrix/client/v3/rooms/{roomId}/kick kick access token required application/json 200, 403
POST /_matrix/client/v3/rooms/{roomId}/leave leaveRoom access token required application/json 200, 429
POST /_matrix/client/v3/rooms/{roomId}/unban unban access token required application/json 200, 403

Implementation note (0.12.16, CSAZ-7): invite and knock summaries expose only sender, type, state_key, and content. The disclosure policy permits the seven room-summary types recommended in the stripped-state specification plus the recipient's own membership, excluding other membership events, ACLs, power levels, and custom private state. Local invitations retain their invitation-time snapshot; historical and federated snapshots are re-pruned on client reads, including sliding-sync invite responses. Matrix permits additional event types; the restrictive allowlist is our policy (ADR-0088), not a protocol prohibition.

Room participation

Method Path Operation ID Auth Request body Responses
GET /_matrix/client/v1/rooms/{roomId}/timestamp_to_event getEventByTimestamp access token - 200, 404, 429
GET /_matrix/client/v3/events getEvents access token - 200, 400
GET /_matrix/client/v3/events peekEvents access token - 200, 400
GET /_matrix/client/v3/events/{eventId} getOneEvent access token - 200, 404
GET /_matrix/client/v3/initialSync initialSync access token - 200, 404
GET /_matrix/client/v3/rooms/{roomId}/context/{eventId} getEventContext access token - 200
GET /_matrix/client/v3/rooms/{roomId}/event/{eventId} getOneRoomEvent access token - 200, 404
GET /_matrix/client/v3/rooms/{roomId}/initialSync roomInitialSync access token - 200, 403
GET /_matrix/client/v3/rooms/{roomId}/joined_members getJoinedMembersByRoom access token - 200, 403
GET /_matrix/client/v3/rooms/{roomId}/members getMembersByRoom access token - 200, 403
GET /_matrix/client/v3/rooms/{roomId}/messages getRoomEvents access token - 200, 403
POST /_matrix/client/v3/rooms/{roomId}/receipt/{receiptType}/{eventId} postReceipt access token required application/json 200, 400, 429
PUT /_matrix/client/v3/rooms/{roomId}/redact/{eventId}/{txnId} redactEvent access token required application/json 200, 400, 403, 404
PUT /_matrix/client/v3/rooms/{roomId}/send/{eventType}/{txnId} sendMessage access token required application/json 200, 400
GET /_matrix/client/v3/rooms/{roomId}/state getRoomState access token - 200, 403
GET /_matrix/client/v3/rooms/{roomId}/state/{eventType}/{stateKey} getRoomStateWithKey access token - 200, 403, 404
PUT /_matrix/client/v3/rooms/{roomId}/state/{eventType}/{stateKey} setRoomStateWithKey access token required application/json 200, 400, 403
PUT /_matrix/client/v3/rooms/{roomId}/typing/{userId} setTyping access token required application/json 200, 429
GET /_matrix/client/v3/sync sync access token - 200
POST /_matrix/client/v3/user/{userId}/filter defineFilter access token required application/json 200
GET /_matrix/client/v3/user/{userId}/filter/{filterId} getFilter access token - 200, 404

Room upgrades

Method Path Operation ID Auth Request body Responses
POST /_matrix/client/v3/rooms/{roomId}/upgrade upgradeRoom access token required application/json 200, 400, 403
Method Path Operation ID Auth Request body Responses
POST /_matrix/client/v3/search search access token required application/json 200, 400, 429

Send-to-Device messaging

Method Path Operation ID Auth Request body Responses
PUT /_matrix/client/v3/sendToDevice/{eventType}/{txnId} sendToDevice access token required application/json 200

Server administration

Method Path Operation ID Auth Request body Responses
GET /_matrix/client/v1/admin/lock/{userId} getAdminLockUser access token - 200, 400, 403, 404
PUT /_matrix/client/v1/admin/lock/{userId} setAdminLockUser access token required application/json 200, 400, 403, 404
GET /_matrix/client/v1/admin/suspend/{userId} getAdminSuspendUser access token - 200, 400, 403, 404
PUT /_matrix/client/v1/admin/suspend/{userId} setAdminSuspendUser access token required application/json 200, 400, 403, 404
GET /_matrix/client/v3/admin/whois/{userId} getWhoIs access token - 200
GET /_matrix/client/versions getVersions optional - 200
GET /.well-known/matrix/client getWellknown none - 200, 404
GET /.well-known/matrix/policy_server getWellknownPolicy none - 200, 404
GET /.well-known/matrix/support getWellknownSupport none - 200, 404

Session management

Method Path Operation ID Auth Request body Responses
GET /_matrix/client/v1/auth_metadata getAuthMetadata none - 200, 404

Implemented: returns RFC 8414 metadata when server.oidc.* is configured; 404 M_UNRECOGNIZED otherwise. | POST | /_matrix/client/v1/login/get_token | generateLoginToken | access token | required application/json | 200, 400, 401, 429 | | GET | /_matrix/client/v3/account/whoami | getTokenOwner | access token | - | 200, 401, 403, 429 | | GET | /_matrix/client/v3/login | getLoginFlows | none | - | 200, 404, 429 | | POST | /_matrix/client/v3/login | login | none | required application/json | 200, 400, 403, 429 | | GET | /_matrix/client/v3/login/sso/redirect | redirectToSSO | none | - | 302 | | GET | /_matrix/client/v3/login/sso/redirect/{idpId} | redirectToIdP | none | - | 302, 404 | | POST | /_matrix/client/v3/logout | logout | access token | - | 200 | | POST | /_matrix/client/v3/logout/all | logout_all | access token | - | 200 |

Refresh-enabled POST /_matrix/client/v3/login and POST /_matrix/client/v3/refresh include expires_in_ms for positive configured access-token lifetimes. When security.access_token_lifetime_ms is zero, both omit the optional field: its absence means that the issued access token does not expire (Matrix v1.19). Legacy login without refresh support is unchanged. These response semantics are covered by tests/conformance/test_token_expiry_conformance.cpp; registration expiry responses are outside that scenario's scope.

Spaces

Method Path Operation ID Auth Request body Responses
GET /_matrix/client/v1/rooms/{roomId}/hierarchy getSpaceHierarchy access token - 200, 400, 403, 429

Third-party Lookup

Method Path Operation ID Auth Request body Responses
GET /_matrix/client/v3/thirdparty/location queryLocationByAlias access token - 200, 404
GET /_matrix/client/v3/thirdparty/location/{protocol} queryLocationByProtocol access token - 200, 404
GET /_matrix/client/v3/thirdparty/protocol/{protocol} getProtocolMetadata access token - 200, 404
GET /_matrix/client/v3/thirdparty/protocols getProtocols access token - 200
GET /_matrix/client/v3/thirdparty/user queryUserByID access token - 200, 404
GET /_matrix/client/v3/thirdparty/user/{protocol} queryUserByProtocol access token - 200, 404

Threads

Method Path Operation ID Auth Request body Responses
GET /_matrix/client/v1/rooms/{roomId}/threads getThreadRoots access token - 200, 400, 403, 429

untagged

Method Path Operation ID Auth Request body Responses
POST /_matrix/client/v1/appservice/{appserviceId}/ping pingAppservice appservice token required application/json 200, 400, 403, 502, 504
GET /_matrix/client/v1/room_summary/{roomIdOrAlias} getRoomSummary signed request - 200, 404
POST /_matrix/client/v3/refresh refresh none required application/json 200, 401, 429

User data

Method Path Operation ID Auth Request body Responses
GET /_matrix/client/v3/profile/{userId} getUserProfile none - 200, 403, 404
GET /_matrix/client/v3/profile/{userId}/{keyName} getProfileField none - 200, 403, 404
PUT /_matrix/client/v3/profile/{userId}/{keyName} setProfileField access token required application/json 200, 400, 403, 429
DELETE /_matrix/client/v3/profile/{userId}/{keyName} deleteProfileField access token - 200, 400, 403, 429
GET /_matrix/client/v3/user/{userId}/account_data/{type} getAccountData access token - 200, 403, 404
PUT /_matrix/client/v3/user/{userId}/account_data/{type} setAccountData access token required application/json 200, 400, 403, 405
GET /_matrix/client/v3/user/{userId}/rooms/{roomId}/account_data/{type} getAccountDataPerRoom access token - 200, 400, 403, 404
PUT /_matrix/client/v3/user/{userId}/rooms/{roomId}/account_data/{type} setAccountDataPerRoom access token required application/json 200, 400, 403, 405
GET /_matrix/client/v3/user/{userId}/rooms/{roomId}/tags getRoomTags access token - 200
PUT /_matrix/client/v3/user/{userId}/rooms/{roomId}/tags/{tag} setRoomTag access token required application/json 200
DELETE /_matrix/client/v3/user/{userId}/rooms/{roomId}/tags/{tag} deleteRoomTag access token - 200

User directory

Method Path Operation ID Auth Request body Responses
POST /_matrix/client/v3/user_directory/search searchUserDirectory access token required application/json 200, 429

VOIP

Method Path Operation ID Auth Request body Responses
GET /_matrix/client/v3/voip/turnServer getTurnServer access token - 200, 429

Security audit follow-up (0.12.17)

POST /_matrix/client/v3/publicRooms runs after the shared authentication and account-state gates, including remote lookups. Directory publication is durable and independent of join rules: a published invite-only room remains listed. Presence sync includes only peers sharing a current joined membership; PUT presence requires online, offline or unavailable and an optional string status_msg. The local 1024 UTF-8 byte status cap is resource policy (ADR-0098).

Application service ping, network directories and 3PID requestToken (conformance wave 3)

POST /_matrix/client/v1/appservice/{appserviceId}/ping requires an application service as_token whose appservice is the one named in the path (403 M_FORBIDDEN for a user's token, another appservice's token or an unknown id; 401 with no token). It calls POST /_matrix/app/v1/ping on the registered url with the registration's hs_token and the optional transaction_id, copied as given, the empty string included (a non-string is 400 M_BAD_JSON), and answers 200 {"duration_ms": N}, 400 M_URL_NOT_SET, 502 M_CONNECTION_FAILED, 502 M_BAD_STATUS carrying the appservice's status and a body cut to 1024 bytes of well-formed UTF-8, or 504 M_CONNECTION_TIMEOUT. It is not rate limited for a verified appservice, holds a client-outbound slot (429 M_LIMIT_EXCEEDED when none is free), and releases runtime.mutex for the call.

PUT /_matrix/client/v3/directory/list/appservice/{networkId}/{roomId} takes {"visibility": "public" | "private"} from an as_token and persists the room in the directory of that network (ADR-0192): networkId must be a protocol the registration declares (404 M_NOT_FOUND), the room must exist (404) and the appservice must have an interest in it (403 M_FORBIDDEN); a user's token is 403. POST /publicRooms lists the homeserver's own directory by default, one network's rooms for third_party_instance_id (the instance_id from GET /thirdparty/protocol/{protocol}, <registration id>:<protocol>:<index>), and both together for include_all_networks: true. Naming both is 400 M_INVALID_PARAM; a wrong type for either is 400 M_BAD_JSON; an id that names no network lists nothing. A ?server= lookup forwards both fields to the remote server.

The four requestToken endpoints (/register/{email,msisdn}/requestToken, /account/3pid/{email,msisdn}/requestToken) forward the client's send_attempt to the identity server, and every route that forwards an id_access_token (those, /account/3pid/bind, /account/3pid and the 3PID form of /rooms/{roomId}/invite) answers 400 M_INVALID_PARAM for one that is not printable ASCII without spaces of at most 4096 bytes.

Per-user key and filter caps (CSAZ-10)

POST /_matrix/client/v3/keys/upload answers 400 M_TOO_LARGE and stores nothing (no device, one-time or fallback keys) when the request would leave a device holding more than server.client_api.max_one_time_keys_per_device one-time keys; key IDs already held are not counted twice. A device keeps one fallback key per algorithm: a newly uploaded fallback key replaces the previous key of that algorithm. POST /_matrix/client/v3/keys/signatures/upload answers 400 M_TOO_LARGE and stores nothing when it would take the signer past server.client_api.max_key_signatures_per_user distinct (target user, target key) signatures. POST /_matrix/client/v3/user/{userId}/filter returns the existing filter_id for a definition identical to a stored one after JSON canonicalisation, and otherwise answers 400 M_TOO_LARGE once the user holds server.client_api.max_filters_per_user filters. Over-cap requests are refused, never satisfied by evicting stored rows. See operator budgets.

Configurable response budgets (0.12.18)

The client-server runtime applies server.client_api policy to sync room/timeline counts, message/search/context work and pages, notifications/relations/threads/public-room/hierarchy listings and transient session cardinality. Sliding-sync parsing receives the same configured policy for timeline/subscription/state-pair caps. Client-requested limits remain upper bounds; increasing a server maximum does not change a client's requested timeline size or bypass history visibility, ignore-list or accepted-event filtering. See operator budgets for defaults and ranges. Runtime policies require restart.

Conformance audit wave 4 (0.12.38)

Room account data (GET/PUT /user/{userId}/rooms/{roomId}/account_data/{type}) is routed. Both account-data PUTs require a JSON object body (400 M_NOT_JSON / M_BAD_JSON) and refuse the server-managed m.fully_read and m.push_rules with 405 M_BAD_JSON. A room PUT needs a membership row in the room and stops new types at server.client_api.max_room_account_data_per_room (ADR-0197). POST /register without username gets a generated localpart (ADR-0198). PUT /rooms/{roomId}/typing/{userId} requires a boolean typing, and typing expires after its timeout, at most 120 s (ADR-0199). POST /search covers rooms the user has left, up to the point they left.