Changelog
Composable endpoints

Composition table

Add and Map pairs, the routes each one maps, whether the group is per session or shared, and which snapshots contain it.

Each group is one Add* and one Map*. A per-session group finishes in a sign-in completer, so map it once for each session prefix. A shared group does not start a session, so map it once.

This table is the route list for the password facade, the 3.x composites, and a custom host. The password facade's expansion is on Password auth. The 3.x call is on 3.x facade. The upgrade guide links here instead of copying the table: Upgrade to 4.0.

Routes below are relative to the group you pass to Map*. Passkey maps add the /passkeys prefix themselves. The composite names in the last column are the route-table snapshots. MapPasswordAuthCookie is MapPasswordAuth with Session left at Cookie and no passkey domain. MapPasswordAuthCookiePasskeys is that call with Passkeys.ServerDomain set. The Jwt names are the same split with Session set to Jwt and cookie refresh transport. Body transport drops GET /csrfToken from MapJwtSessionEndpoints.

MapPasskeySignInEndpoints still maps register/options and register, and it ensures confirm-email when that endpoint name is new. MapPasskeyEndpoints includes those sign-in routes and passkey management, and it leaves confirm-email unmapped. MapPasskeySignUpEndpoints and MapPasskeyRegisterOptionsEndpoints are the split maps for hosts that do not want the whole sign-in bundle.

MapAccountManagementEndpoints maps POST /confirmIdentity/passkeyOptions when passkey services are registered. MapIdentityManagementApi always maps that route. POST /confirmIdentity/emailCode/send is mapped only when email-code services are registered. The AddAuthEndpoints / MapAuthEndpoints facade maps neither.

AddMapScopeRoutesComposites
AddPasswordSignUpEndpointsMapPasswordSignUpEndpointssharedPOST /registerMapIdentityManagementApi, MapPasswordAuthCookie, MapPasswordAuthCookiePasskeys, MapPasswordAuthJwt, MapPasswordAuthJwtPasskeys
AddPasswordSignInEndpointsMapPasswordSignInEndpointsper sessionPOST /loginMapCookieAuthEndpoints, MapBearerAuthEndpoints, MapPasswordAuthCookie, MapPasswordAuthCookiePasskeys
AddPasswordRecoveryEndpointsMapPasswordRecoveryEndpointssharedPOST /forgotPassword, POST /resetPasswordMapIdentityManagementApi, MapPasswordAuthCookie, MapPasswordAuthCookiePasskeys, MapPasswordAuthJwt, MapPasswordAuthJwtPasskeys
AddAccountAbuseRateLimitingMapConfirmEmailEndpointssharedGET /confirmEmail, POST /resendConfirmationEmailMapIdentityManagementApi, MapPasswordAuthCookie, MapPasswordAuthCookiePasskeys, MapPasswordAuthJwt, MapPasswordAuthJwtPasskeys
AddAccountManagementEndpointsMapAccountManagementEndpointssharedGET /manage/info, POST /manage/info, GET /manage/2fa, POST /manage/2fa, GET /manage/authMethods, POST /confirmIdentity, POST /manage/passwordMapIdentityManagementApi, MapPasswordAuthCookie, MapPasswordAuthCookiePasskeys, MapPasswordAuthJwt, MapPasswordAuthJwtPasskeys
AddAccountManagementEndpointsMapAccountManagementEndpointssharedPOST /confirmIdentity/passkeyOptionsMapIdentityManagementApi, MapPasswordAuthCookiePasskeys, MapPasswordAuthJwtPasskeys
AddAccountManagementEndpointsMapAccountManagementEndpointssharedPOST /confirmIdentity/emailCode/sendnone
AddCookieSessionEndpointsMapCookieSessionEndpointsper sessionPOST /logout, GET /csrfTokenMapCookieAuthEndpoints, MapPasswordAuthCookie, MapPasswordAuthCookiePasskeys
AddBearerSessionEndpointsMapBearerSessionEndpointsper sessionPOST /refresh, POST /logoutMapBearerAuthEndpoints
AddJwtEndpointsMapJwtPasswordEndpointsper sessionPOST /createMapJwtAuthEndpoints, MapPasswordAuthJwt, MapPasswordAuthJwtPasskeys
AddJwtEndpointsMapJwtSessionEndpointsper sessionPOST /refresh, GET /verify, POST /logout, GET /csrfTokenMapJwtAuthEndpoints, MapPasswordAuthJwt, MapPasswordAuthJwtPasskeys
AddPasskeySignInEndpointsMapPasskeySignInEndpointsper sessionPOST /passkeys/requestOptions, POST /passkeys/login, POST /passkeys/register/options, POST /passkeys/registerMapPasskeyEndpoints, MapPasswordAuthCookiePasskeys, MapPasswordAuthJwtPasskeys
AddPasskeySignUpEndpointsMapPasskeySignUpEndpointsper sessionPOST /passkeys/registernone
AddPasskeyRegisterOptionsEndpointsMapPasskeyRegisterOptionsEndpointssharedPOST /passkeys/register/optionsnone
AddPasskeyManagementEndpointsMapPasskeyManagementEndpointssharedGET /passkeys/, POST /passkeys/, POST /passkeys/creationOptions, PATCH /passkeys/, DELETE /passkeys/{credentialIdUrl}MapPasskeyEndpoints, MapPasswordAuthCookiePasskeys, MapPasswordAuthJwtPasskeys
AddEmailCodeSendEndpointsMapEmailCodeSendEndpointssharedPOST /emailCode/sendnone
AddEmailCodeSignInEndpointsMapEmailCodeSignInEndpointsper sessionPOST /emailCode/verifynone
AddExternalAuthEndpointsMapExternalAuthEndpointsper sessionGET /login/github, GET /login/github/callbacknone
AddExternalAuthEndpointsMapExternalAccountEndpointssharedGET /logins, DELETE /logins/{loginProvider}/{providerKey}, GET /link/{scheme}, GET /link/{scheme}/callbacknone

MapExternalAuthEndpoints for Google uses GET /login/google and GET /login/google/callback. Those paths are the same shape as the GitHub row. They are not in a composite snapshot.

MapSignInEndpoints<TUser>(AuthEndpointsSession) maps the per-session rows whose Add* is registered, plus that session's session row. Password login on a JWT session is MapJwtPasswordEndpoints, not POST /login. MapSharedAuthEndpoints<TUser>(sharedPath) maps the shared rows whose Add* is registered. Null sharedPath uses the builder you call it on.

MapPasswordEndpoints is sign-up, sign-in, and recovery. MapCookieAuthEndpoints is cookie POST /login on the 3.x handler, then MapCookieSessionEndpoints. MapBearerAuthEndpoints is Identity bearer POST /login, then MapBearerSessionEndpoints. MapJwtAuthEndpoints is MapJwtPasswordEndpoints and MapJwtSessionEndpoints. MapIdentityManagementApi is MapPasswordEndpoints with PasswordLoginMode.None, MapConfirmEmailEndpoints, and MapAccountManagementEndpoints. MapPasskeyEndpoints is passkey sign-in and management on one /passkeys group.

Two session prefixes can both map POST /logout. Put them on different groups. MapPasswordEndpoints in cookie mode and MapCookieAuthEndpoints both map POST /login. MapPasskeyEndpoints already includes sign-in, so do not add MapPasskeySignInEndpoints on that same prefix.

Confirm-email keeps one endpoint name. Map it with the shared routes, not under every session prefix. MapPasswordSignUpEndpoints and MapAccountManagementEndpoints ensure that route when the name is new. A later map with the same name leaves the first route in place.