diff --git a/develop/modules/account_validity_callbacks.html b/develop/modules/account_validity_callbacks.html
index 1d6d0a734d..0eabf60bb7 100644
--- a/develop/modules/account_validity_callbacks.html
+++ b/develop/modules/account_validity_callbacks.html
@@ -189,6 +189,7 @@ Synapse instance. Account validity callbacks can be registered using the module
<code>register_account_validity_callbacks</code> method.</p>
<p>The available account validity callbacks are:</p>
<h3 id="is_user_expired"><a class="header" href="#is_user_expired"><code>is_user_expired</code></a></h3>
+<p><em>First introduced in Synapse v1.39.0</em></p>
<pre><code class="language-python">async def is_user_expired(user: str) -> Optional[bool]
</code></pre>
<p>Called when processing any authenticated request (except for logout requests). The module
@@ -203,6 +204,7 @@ callback returns <code>None</code>, Synapse falls through to the next one. The v
callback that does not return <code>None</code> will be used. If this happens, Synapse will not call
any of the subsequent implementations of this callback.</p>
<h3 id="on_user_registration"><a class="header" href="#on_user_registration"><code>on_user_registration</code></a></h3>
+<p><em>First introduced in Synapse v1.39.0</em></p>
<pre><code class="language-python">async def on_user_registration(user: str) -> None
</code></pre>
<p>Called after successfully registering a user, in case the module needs to perform extra
diff --git a/develop/modules/password_auth_provider_callbacks.html b/develop/modules/password_auth_provider_callbacks.html
index dbc38dfd12..115ded8534 100644
--- a/develop/modules/password_auth_provider_callbacks.html
+++ b/develop/modules/password_auth_provider_callbacks.html
@@ -188,6 +188,7 @@ their Synapse installation with an external authentication system. The callbacks
registered by using the Module API's <code>register_password_auth_provider_callbacks</code> method.</p>
<h2 id="callbacks"><a class="header" href="#callbacks">Callbacks</a></h2>
<h3 id="auth_checkers"><a class="header" href="#auth_checkers"><code>auth_checkers</code></a></h3>
+<p><em>First introduced in Synapse v1.46.0</em></p>
<pre><code> auth_checkers: Dict[Tuple[str,Tuple], Callable]
</code></pre>
<p>A dict mapping from tuples of a login type identifier (such as <code>m.login.password</code>) and a
@@ -223,6 +224,7 @@ optionally a callback). In that case, the return value of that callback will be
and subsequent callbacks will not be fired. If every callback returns <code>None</code>, then the
authentication fails.</p>
<h3 id="check_3pid_auth"><a class="header" href="#check_3pid_auth"><code>check_3pid_auth</code></a></h3>
+<p><em>First introduced in Synapse v1.46.0</em></p>
<pre><code class="language-python">async def check_3pid_auth(
medium: str,
address: str,
@@ -247,6 +249,7 @@ callback that does not return <code>None</code> will be used. If this happens, S
any of the subsequent implementations of this callback. If every callback return <code>None</code>,
the authentication is denied.</p>
<h3 id="on_logged_out"><a class="header" href="#on_logged_out"><code>on_logged_out</code></a></h3>
+<p><em>First introduced in Synapse v1.46.0</em></p>
<pre><code class="language-python">async def on_logged_out(
user_id: str,
device_id: Optional[str],
diff --git a/develop/modules/presence_router_callbacks.html b/develop/modules/presence_router_callbacks.html
index ff95a5936f..43251d6828 100644
--- a/develop/modules/presence_router_callbacks.html
+++ b/develop/modules/presence_router_callbacks.html
@@ -189,6 +189,7 @@ registered using the module API's <code>register_presence_router_callbacks</code
<h2 id="callbacks"><a class="header" href="#callbacks">Callbacks</a></h2>
<p>The available presence router callbacks are:</p>
<h3 id="get_users_for_states"><a class="header" href="#get_users_for_states"><code>get_users_for_states</code></a></h3>
+<p><em>First introduced in Synapse v1.42.0</em></p>
<pre><code class="language-python">async def get_users_for_states(
state_updates: Iterable["synapse.api.UserPresenceState"],
) -> Dict[str, Set["synapse.api.UserPresenceState"]]
@@ -203,6 +204,7 @@ must return a dictionary that maps from Matrix user IDs (which can be local or r
by the callbacks. If multiple callbacks return a dictionary containing the same key,
Synapse concatenates the sets associated with this key from each dictionary. </p>
<h3 id="get_interested_users"><a class="header" href="#get_interested_users"><code>get_interested_users</code></a></h3>
+<p><em>First introduced in Synapse v1.42.0</em></p>
<pre><code class="language-python">async def get_interested_users(
user_id: str
) -> Union[Set[str], "synapse.module_api.PRESENCE_ALL_USERS"]
diff --git a/develop/modules/spam_checker_callbacks.html b/develop/modules/spam_checker_callbacks.html
index f43444d402..2bb382af2a 100644
--- a/develop/modules/spam_checker_callbacks.html
+++ b/develop/modules/spam_checker_callbacks.html
@@ -189,6 +189,7 @@ Synapse instances. Spam checker callbacks can be registered using the module API
<h2 id="callbacks"><a class="header" href="#callbacks">Callbacks</a></h2>
<p>The available spam checker callbacks are:</p>
<h3 id="check_event_for_spam"><a class="header" href="#check_event_for_spam"><code>check_event_for_spam</code></a></h3>
+<p><em>First introduced in Synapse v1.37.0</em></p>
<pre><code class="language-python">async def check_event_for_spam(event: "synapse.events.EventBase") -> Union[bool, str]
</code></pre>
<p>Called when receiving an event from a client or via federation. The module can return
@@ -200,6 +201,7 @@ callback returns <code>False</code>, Synapse falls through to the next one. The
callback that does not return <code>False</code> will be used. If this happens, Synapse will not call
any of the subsequent implementations of this callback.</p>
<h3 id="user_may_join_room"><a class="header" href="#user_may_join_room"><code>user_may_join_room</code></a></h3>
+<p><em>First introduced in Synapse v1.37.0</em></p>
<pre><code class="language-python">async def user_may_join_room(user: str, room: str, is_invited: bool) -> bool
</code></pre>
<p>Called when a user is trying to join a room. The module must return a <code>bool</code> to indicate
@@ -214,6 +216,7 @@ callback returns <code>True</code>, Synapse falls through to the next one. The v
callback that does not return <code>True</code> will be used. If this happens, Synapse will not call
any of the subsequent implementations of this callback.</p>
<h3 id="user_may_invite"><a class="header" href="#user_may_invite"><code>user_may_invite</code></a></h3>
+<p><em>First introduced in Synapse v1.37.0</em></p>
<pre><code class="language-python">async def user_may_invite(inviter: str, invitee: str, room_id: str) -> bool
</code></pre>
<p>Called when processing an invitation. The module must return a <code>bool</code> indicating whether
@@ -224,6 +227,7 @@ callback returns <code>True</code>, Synapse falls through to the next one. The v
callback that does not return <code>True</code> will be used. If this happens, Synapse will not call
any of the subsequent implementations of this callback.</p>
<h3 id="user_may_send_3pid_invite"><a class="header" href="#user_may_send_3pid_invite"><code>user_may_send_3pid_invite</code></a></h3>
+<p><em>First introduced in Synapse v1.45.0</em></p>
<pre><code class="language-python">async def user_may_send_3pid_invite(
inviter: str,
medium: str,
@@ -254,6 +258,7 @@ callback returns <code>True</code>, Synapse falls through to the next one. The v
callback that does not return <code>True</code> will be used. If this happens, Synapse will not call
any of the subsequent implementations of this callback.</p>
<h3 id="user_may_create_room"><a class="header" href="#user_may_create_room"><code>user_may_create_room</code></a></h3>
+<p><em>First introduced in Synapse v1.37.0</em></p>
<pre><code class="language-python">async def user_may_create_room(user: str) -> bool
</code></pre>
<p>Called when processing a room creation request. The module must return a <code>bool</code> indicating
@@ -263,6 +268,7 @@ callback returns <code>True</code>, Synapse falls through to the next one. The v
callback that does not return <code>True</code> will be used. If this happens, Synapse will not call
any of the subsequent implementations of this callback.</p>
<h3 id="user_may_create_room_with_invites"><a class="header" href="#user_may_create_room_with_invites"><code>user_may_create_room_with_invites</code></a></h3>
+<p><em>First introduced in Synapse v1.44.0</em></p>
<pre><code class="language-python">async def user_may_create_room_with_invites(
user: str,
invites: List[str],
@@ -288,6 +294,7 @@ callback returns <code>True</code>, Synapse falls through to the next one. The v
callback that does not return <code>True</code> will be used. If this happens, Synapse will not call
any of the subsequent implementations of this callback.</p>
<h3 id="user_may_create_room_alias"><a class="header" href="#user_may_create_room_alias"><code>user_may_create_room_alias</code></a></h3>
+<p><em>First introduced in Synapse v1.37.0</em></p>
<pre><code class="language-python">async def user_may_create_room_alias(user: str, room_alias: "synapse.types.RoomAlias") -> bool
</code></pre>
<p>Called when trying to associate an alias with an existing room. The module must return a
@@ -298,6 +305,7 @@ callback returns <code>True</code>, Synapse falls through to the next one. The v
callback that does not return <code>True</code> will be used. If this happens, Synapse will not call
any of the subsequent implementations of this callback.</p>
<h3 id="user_may_publish_room"><a class="header" href="#user_may_publish_room"><code>user_may_publish_room</code></a></h3>
+<p><em>First introduced in Synapse v1.37.0</em></p>
<pre><code class="language-python">async def user_may_publish_room(user: str, room_id: str) -> bool
</code></pre>
<p>Called when trying to publish a room to the homeserver's public rooms directory. The
@@ -308,6 +316,7 @@ callback returns <code>True</code>, Synapse falls through to the next one. The v
callback that does not return <code>True</code> will be used. If this happens, Synapse will not call
any of the subsequent implementations of this callback.</p>
<h3 id="check_username_for_spam"><a class="header" href="#check_username_for_spam"><code>check_username_for_spam</code></a></h3>
+<p><em>First introduced in Synapse v1.37.0</em></p>
<pre><code class="language-python">async def check_username_for_spam(user_profile: Dict[str, str]) -> bool
</code></pre>
<p>Called when computing search results in the user directory. The module must return a
@@ -325,6 +334,7 @@ callback returns <code>False</code>, Synapse falls through to the next one. The
callback that does not return <code>False</code> will be used. If this happens, Synapse will not call
any of the subsequent implementations of this callback.</p>
<h3 id="check_registration_for_spam"><a class="header" href="#check_registration_for_spam"><code>check_registration_for_spam</code></a></h3>
+<p><em>First introduced in Synapse v1.37.0</em></p>
<pre><code class="language-python">async def check_registration_for_spam(
email_threepid: Optional[dict],
username: Optional[str],
@@ -351,6 +361,7 @@ The value of the first callback that does not return <code>RegistrationBehaviour
be used. If this happens, Synapse will not call any of the subsequent implementations of
this callback.</p>
<h3 id="check_media_file_for_spam"><a class="header" href="#check_media_file_for_spam"><code>check_media_file_for_spam</code></a></h3>
+<p><em>First introduced in Synapse v1.37.0</em></p>
<pre><code class="language-python">async def check_media_file_for_spam(
file_wrapper: "synapse.rest.media.v1.media_storage.ReadableFileWrapper",
file_info: "synapse.rest.media.v1._base.FileInfo",
diff --git a/develop/modules/third_party_rules_callbacks.html b/develop/modules/third_party_rules_callbacks.html
index adf9d398f6..7d9f8f0aac 100644
--- a/develop/modules/third_party_rules_callbacks.html
+++ b/develop/modules/third_party_rules_callbacks.html
@@ -189,6 +189,7 @@ the module API's <code>register_third_party_rules_callbacks</code> method.</p>
<h2 id="callbacks"><a class="header" href="#callbacks">Callbacks</a></h2>
<p>The available third party rules callbacks are:</p>
<h3 id="check_event_allowed"><a class="header" href="#check_event_allowed"><code>check_event_allowed</code></a></h3>
+<p><em>First introduced in Synapse v1.39.0</em></p>
<pre><code class="language-python">async def check_event_allowed(
event: "synapse.events.EventBase",
state_events: "synapse.types.StateMap",
@@ -221,6 +222,7 @@ callback returns <code>True</code>, Synapse falls through to the next one. The v
callback that does not return <code>True</code> will be used. If this happens, Synapse will not call
any of the subsequent implementations of this callback.</p>
<h3 id="on_create_room"><a class="header" href="#on_create_room"><code>on_create_room</code></a></h3>
+<p><em>First introduced in Synapse v1.39.0</em></p>
<pre><code class="language-python">async def on_create_room(
requester: "synapse.types.Requester",
request_content: dict,
@@ -240,6 +242,7 @@ room creation will be forbidden as soon as one of the callbacks raises an except
this happens, Synapse will not call any of the subsequent implementations of this
callback.</p>
<h3 id="check_threepid_can_be_invited"><a class="header" href="#check_threepid_can_be_invited"><code>check_threepid_can_be_invited</code></a></h3>
+<p><em>First introduced in Synapse v1.39.0</em></p>
<pre><code class="language-python">async def check_threepid_can_be_invited(
medium: str,
address: str,
@@ -253,6 +256,7 @@ callback returns <code>True</code>, Synapse falls through to the next one. The v
callback that does not return <code>True</code> will be used. If this happens, Synapse will not call
any of the subsequent implementations of this callback.</p>
<h3 id="check_visibility_can_be_modified"><a class="header" href="#check_visibility_can_be_modified"><code>check_visibility_can_be_modified</code></a></h3>
+<p><em>First introduced in Synapse v1.39.0</em></p>
<pre><code class="language-python">async def check_visibility_can_be_modified(
room_id: str,
state_events: "synapse.types.StateMap",
|