2021-12-06 09:59:50 -07:00
|
|
|
# Federation API
|
|
|
|
|
|
|
|
This API allows a server administrator to manage Synapse's federation with other homeservers.
|
|
|
|
|
|
|
|
Note: This API is new, experimental and "subject to change".
|
|
|
|
|
|
|
|
## List of destinations
|
|
|
|
|
|
|
|
This API gets the current destination retry timing info for all remote servers.
|
|
|
|
|
|
|
|
The list contains all the servers with which the server federates,
|
|
|
|
regardless of whether an error occurred or not.
|
|
|
|
If an error occurs, it may take up to 20 minutes for the error to be displayed here,
|
|
|
|
as a complete retry must have failed.
|
|
|
|
|
|
|
|
The API is:
|
|
|
|
|
|
|
|
A standard request with no filtering:
|
|
|
|
|
|
|
|
```
|
|
|
|
GET /_synapse/admin/v1/federation/destinations
|
|
|
|
```
|
|
|
|
|
|
|
|
A response body like the following is returned:
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"destinations":[
|
|
|
|
{
|
|
|
|
"destination": "matrix.org",
|
|
|
|
"retry_last_ts": 1557332397936,
|
|
|
|
"retry_interval": 3000000,
|
|
|
|
"failure_ts": 1557329397936,
|
|
|
|
"last_successful_stream_ordering": null
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"total": 1
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
To paginate, check for `next_token` and if present, call the endpoint again
|
|
|
|
with `from` set to the value of `next_token`. This will return a new page.
|
|
|
|
|
|
|
|
If the endpoint does not return a `next_token` then there are no more destinations
|
|
|
|
to paginate through.
|
|
|
|
|
|
|
|
**Parameters**
|
|
|
|
|
|
|
|
The following query parameters are available:
|
|
|
|
|
|
|
|
- `from` - Offset in the returned list. Defaults to `0`.
|
|
|
|
- `limit` - Maximum amount of destinations to return. Defaults to `100`.
|
|
|
|
- `order_by` - The method in which to sort the returned list of destinations.
|
|
|
|
Valid values are:
|
|
|
|
- `destination` - Destinations are ordered alphabetically by remote server name.
|
|
|
|
This is the default.
|
|
|
|
- `retry_last_ts` - Destinations are ordered by time of last retry attempt in ms.
|
|
|
|
- `retry_interval` - Destinations are ordered by how long until next retry in ms.
|
|
|
|
- `failure_ts` - Destinations are ordered by when the server started failing in ms.
|
|
|
|
- `last_successful_stream_ordering` - Destinations are ordered by the stream ordering
|
|
|
|
of the most recent successfully-sent PDU.
|
|
|
|
- `dir` - Direction of room order. Either `f` for forwards or `b` for backwards. Setting
|
|
|
|
this value to `b` will reverse the above sort order. Defaults to `f`.
|
|
|
|
|
|
|
|
*Caution:* The database only has an index on the column `destination`.
|
|
|
|
This means that if a different sort order is used,
|
|
|
|
this can cause a large load on the database, especially for large environments.
|
|
|
|
|
|
|
|
**Response**
|
|
|
|
|
|
|
|
The following fields are returned in the JSON response body:
|
|
|
|
|
|
|
|
- `destinations` - An array of objects, each containing information about a destination.
|
|
|
|
Destination objects contain the following fields:
|
|
|
|
- `destination` - string - Name of the remote server to federate.
|
|
|
|
- `retry_last_ts` - integer - The last time Synapse tried and failed to reach the
|
|
|
|
remote server, in ms. This is `0` if the last attempt to communicate with the
|
|
|
|
remote server was successful.
|
|
|
|
- `retry_interval` - integer - How long since the last time Synapse tried to reach
|
2023-09-08 07:47:36 -06:00
|
|
|
the remote server before trying again, in ms. This is `0` if no further retrying occurring.
|
2021-12-06 09:59:50 -07:00
|
|
|
- `failure_ts` - nullable integer - The first time Synapse tried and failed to reach the
|
|
|
|
remote server, in ms. This is `null` if communication with the remote server has never failed.
|
|
|
|
- `last_successful_stream_ordering` - nullable integer - The stream ordering of the most
|
2023-01-05 11:18:00 -07:00
|
|
|
recent successfully-sent [PDU](../understanding_synapse_through_grafana_graphs.md#federation)
|
2021-12-06 09:59:50 -07:00
|
|
|
to this destination, or `null` if this information has not been tracked yet.
|
|
|
|
- `next_token`: string representing a positive integer - Indication for pagination. See above.
|
|
|
|
- `total` - integer - Total number of destinations.
|
|
|
|
|
2022-01-25 05:06:29 -07:00
|
|
|
## Destination Details API
|
2021-12-06 09:59:50 -07:00
|
|
|
|
|
|
|
This API gets the retry timing info for a specific remote server.
|
|
|
|
|
|
|
|
The API is:
|
|
|
|
|
|
|
|
```
|
|
|
|
GET /_synapse/admin/v1/federation/destinations/<destination>
|
|
|
|
```
|
|
|
|
|
|
|
|
A response body like the following is returned:
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"destination": "matrix.org",
|
|
|
|
"retry_last_ts": 1557332397936,
|
|
|
|
"retry_interval": 3000000,
|
|
|
|
"failure_ts": 1557329397936,
|
|
|
|
"last_successful_stream_ordering": null
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2022-01-25 05:06:29 -07:00
|
|
|
**Parameters**
|
|
|
|
|
|
|
|
The following parameters should be set in the URL:
|
|
|
|
|
|
|
|
- `destination` - Name of the remote server.
|
|
|
|
|
2021-12-06 09:59:50 -07:00
|
|
|
**Response**
|
|
|
|
|
|
|
|
The response fields are the same like in the `destinations` array in
|
|
|
|
[List of destinations](#list-of-destinations) response.
|
2022-01-25 05:06:29 -07:00
|
|
|
|
2022-01-25 09:11:40 -07:00
|
|
|
## Destination rooms
|
|
|
|
|
|
|
|
This API gets the rooms that federate with a specific remote server.
|
|
|
|
|
|
|
|
The API is:
|
|
|
|
|
|
|
|
```
|
|
|
|
GET /_synapse/admin/v1/federation/destinations/<destination>/rooms
|
|
|
|
```
|
|
|
|
|
|
|
|
A response body like the following is returned:
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"rooms":[
|
|
|
|
{
|
|
|
|
"room_id": "!OGEhHVWSdvArJzumhm:matrix.org",
|
|
|
|
"stream_ordering": 8326
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"room_id": "!xYvNcQPhnkrdUmYczI:matrix.org",
|
|
|
|
"stream_ordering": 93534
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"total": 2
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
To paginate, check for `next_token` and if present, call the endpoint again
|
|
|
|
with `from` set to the value of `next_token`. This will return a new page.
|
|
|
|
|
|
|
|
If the endpoint does not return a `next_token` then there are no more destinations
|
|
|
|
to paginate through.
|
|
|
|
|
|
|
|
**Parameters**
|
|
|
|
|
|
|
|
The following parameters should be set in the URL:
|
|
|
|
|
|
|
|
- `destination` - Name of the remote server.
|
|
|
|
|
|
|
|
The following query parameters are available:
|
|
|
|
|
|
|
|
- `from` - Offset in the returned list. Defaults to `0`.
|
|
|
|
- `limit` - Maximum amount of destinations to return. Defaults to `100`.
|
|
|
|
- `dir` - Direction of room order by `room_id`. Either `f` for forwards or `b` for
|
|
|
|
backwards. Defaults to `f`.
|
|
|
|
|
|
|
|
**Response**
|
|
|
|
|
|
|
|
The following fields are returned in the JSON response body:
|
|
|
|
|
|
|
|
- `rooms` - An array of objects, each containing information about a room.
|
|
|
|
Room objects contain the following fields:
|
|
|
|
- `room_id` - string - The ID of the room.
|
|
|
|
- `stream_ordering` - integer - The stream ordering of the most recent
|
2023-01-05 11:18:00 -07:00
|
|
|
successfully-sent [PDU](../understanding_synapse_through_grafana_graphs.md#federation)
|
2022-01-25 09:11:40 -07:00
|
|
|
to this destination in this room.
|
|
|
|
- `next_token`: string representing a positive integer - Indication for pagination. See above.
|
|
|
|
- `total` - integer - Total number of destinations.
|
|
|
|
|
2022-01-25 05:06:29 -07:00
|
|
|
## Reset connection timeout
|
|
|
|
|
|
|
|
Synapse makes federation requests to other homeservers. If a federation request fails,
|
|
|
|
Synapse will mark the destination homeserver as offline, preventing any future requests
|
|
|
|
to that server for a "cooldown" period. This period grows over time if the server
|
|
|
|
continues to fail its responses
|
|
|
|
([exponential backoff](https://en.wikipedia.org/wiki/Exponential_backoff)).
|
|
|
|
|
|
|
|
Admins can cancel the cooldown period with this API.
|
|
|
|
|
|
|
|
This API resets the retry timing for a specific remote server and tries to connect to
|
|
|
|
the remote server again. It does not wait for the next `retry_interval`.
|
|
|
|
The connection must have previously run into an error and `retry_last_ts`
|
|
|
|
([Destination Details API](#destination-details-api)) must not be equal to `0`.
|
|
|
|
|
|
|
|
The connection attempt is carried out in the background and can take a while
|
|
|
|
even if the API already returns the http status 200.
|
|
|
|
|
|
|
|
The API is:
|
|
|
|
|
|
|
|
```
|
|
|
|
POST /_synapse/admin/v1/federation/destinations/<destination>/reset_connection
|
|
|
|
|
|
|
|
{}
|
|
|
|
```
|
|
|
|
|
|
|
|
**Parameters**
|
|
|
|
|
|
|
|
The following parameters should be set in the URL:
|
|
|
|
|
|
|
|
- `destination` - Name of the remote server.
|