Matrix Client-Server Versions API
Free unauthenticated Matrix endpoint listing the spec versions and unstable features a homeserver supports — the first call any Matrix client makes. Tested example included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Matrix Client-Server Versions API?
`/_matrix/client/versions` is the one Matrix Client-Server endpoint that requires no authentication. It returns the list of spec versions a homeserver implements plus a map of unstable feature flags, and every Matrix client calls it before anything else.
Matrix is deliberately a moving target: the Client-Server specification is versioned, and features arrive as numbered proposals (MSCs) that servers may implement behind unstable flags long before they are stabilised. A client that assumes a capability exists will break against half the homeservers in the network, so the protocol makes discovery the mandatory first step rather than an optional courtesy.
That is what makes this endpoint interesting outside client development. It is a completely unauthenticated fingerprint of a homeserver: the `versions` array tells you how current the deployment is, and `unstable_features` reveals which experimental proposals the operator has switched on. Pair it with `/.well-known/matrix/client` on the domain — which tells you which host actually serves the API for that domain — and you can survey the public Matrix network without a single account.
Quick facts
- Base URL
https://matrix-client.matrix.org/_matrix/client- Authentication
- No authentication for `/versions`. Every other Client-Server endpoint requires an access token obtained by logging in.
- Rate limit
- Set per homeserver. Matrix.org applies generic rate limiting; a discovery call once per session is well inside it.
- Pricing
- Free. Matrix is an open protocol and homeservers are independently operated.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Matrix Client-Server Versions API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Discover which spec versions a homeserver supports
GET https://matrix-client.matrix.org/_matrix/client/versions
curl 'https://matrix-client.matrix.org/_matrix/client/versions'const res = await fetch("https://matrix-client.matrix.org/_matrix/client/versions");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://matrix-client.matrix.org/_matrix/client/versions", timeout=20)
res.raise_for_status()
print(res.json()){
"versions": [
"r0.0.1",
"r0.1.0",
"r0.2.0",
"r0.3.0",
"r0.4.0",
"r0.5.0",
"r0.6.0",
"r0.6.1",
"v1.1",
"v1.2",
"v1.3",
"v1.4",
"v1.5",
"v1.6",
"v1.7",
"v1.8",
"v1.9",
"v1.10",
"v1.11",
"v1.12"
],
"unstable_features": {
"org.matrix.label_based_filtering": true,
"org.matrix.e2e_cross_signing": true,
"org.matrix.msc2432": true,
"uk.half-shot.msc2666.query_mutual_rooms.stable": true,
"org.matrix.msc3026.busy_presence": false,
"org.matrix.msc2285.stable": true,
"org.matrix.msc3827.stable": true,
"org.matrix.msc3440.stable": true,
"org.matrix.msc3771": true,
"org.matrix.msc3773": false,
"fi.mau.msc2815": false,
"fi.mau.msc2659.stable": true,
"org.matrix.msc3882": false,
"org.matrix.msc3881": false,
"org.matrix.msc3874": false,
"org.matrix.msc3912": false,
"org.matrix.msc3981": true,
"org.matrix.msc3391": false,
"org.matrix.msc4069": false,
"org.matrix.msc4028": false,
"org.matrix.msc4108": false,
"org.matrix.msc4140": false,
"org.matrix.simplified_msc3575": true,
"uk.tcpip.msc4133": false,
"uk.tcpip.msc4133.stable": true,
"org.matrix.msc4155": false,
"org.matrix.msc4306": false,
"com.beeper.msc4169": false,
"org.matrix.msc4354": false,
"org.matrix.msc4380.stable": true,
"org.matrix.msc4429": false,
"org.matrix.msc4445.initial_sync_timeline_topological_ordering": true,
"uk.timedout.msc4491.create_room_invite_reasons": false,
"org.matrix.msc4143": false,
"comParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
(none) | n/a | Optional | The versions endpoint takes no parameters. |
(homeserver) | base URL | Required | Which homeserver to ask. Resolve it from a domain with `/.well-known/matrix/client` rather than guessing. https://matrix-client.matrix.org |
Response fields
versionsarray- Spec versions the server implements, oldest first — legacy `r0.x.y` identifiers followed by modern `v1.x` ones. The last entry is effectively the server's ceiling.
unstable_featuresobject- Map of MSC identifiers to booleans. True means the server has that experimental feature enabled; keys are namespaced by their proposer, such as `org.matrix.msc3827`.
What you can build with the Matrix Client-Server Versions API
- Feature-detect before calling a versioned Client-Server endpoint
- Check whether a homeserver is running a current release
- Survey which experimental MSCs are deployed across public homeservers
- Health-check your own homeserver without holding credentials
Common errors and how to fix them
404
You pointed at the domain rather than the homeserver.
Fix: `example.com` and the host serving its Matrix API are frequently different. Fetch `/.well-known/matrix/client` on the domain first and use the `base_url` it returns.
Feature flag missing
Absent is not the same as false, but treat it the same way.
Fix: Check for the key's presence and truthiness together. Flags disappear once an MSC stabilises into a numbered spec version.
401 on every other endpoint
Only `/versions` is unauthenticated.
Fix: Everything else needs an access token from `/login`. This endpoint is the exception, not the pattern.
Matrix Client-Server Versions API — frequently asked questions
Is the Matrix versions endpoint really unauthenticated?
Yes. It is specified as accessible without an access token precisely so a client can discover what a server supports before it can possibly have logged in.
How do I find the right homeserver URL for a domain?
Fetch `/.well-known/matrix/client` on the domain. It returns the `m.homeserver.base_url` that actually serves the Client-Server API, which is often a different host to the domain itself.
What are unstable_features?
Flags for Matrix Spec Change proposals that a server has implemented before they are stabilised. The keys are namespaced by proposer, and they vanish once the feature lands in a numbered spec version.
Can I use this to check whether a homeserver is up?
It works well as a liveness probe — it is cheap, unauthenticated and returns a small deterministic body. It confirms the API is answering, not that federation or media are healthy.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
URL Parser
Parse a URL into protocol, host, port, path, query parameters and hash. Handles relative URLs with a base and shows query params in a table. Free and private.
HTTP Status Code Lookup
Search HTTP status codes from 100 to 599 with name, category and clear description. Filter by number or text — a fast, free, private in-browser reference.
Matrix Client-Server Versions is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.