maxEndpoints
- ? endpoints.length - maxEndpoints
- : 0
return (
|
{endpointDisplay}
- {overflow > 0 && (
-
- +{overflow} more
-
- )}
|
{t.bucket}
diff --git a/src/static/rate-limits.json b/src/static/rate-limits.json
index 677d116bb6..c250711808 100644
--- a/src/static/rate-limits.json
+++ b/src/static/rate-limits.json
@@ -1,2359 +1 @@
-{
- "endpoints": [
- {
- "method": "GET",
- "path": "/.well-known/jwks.json",
- "bucket": "hydra-public-high"
- },
- {
- "method": "GET",
- "path": "/.well-known/openid-configuration",
- "bucket": "hydra-public-high"
- },
- {
- "method": "GET",
- "path": "/.well-known/ory/webauthn.js",
- "bucket": "hydra-public-high"
- },
- {
- "method": "GET",
- "path": "/admin/clients",
- "bucket": "hydra-admin-medium"
- },
- {
- "method": "POST",
- "path": "/admin/clients",
- "bucket": "hydra-admin-low"
- },
- {
- "method": "GET",
- "path": "/admin/clients/{id}",
- "bucket": "hydra-admin-high"
- },
- {
- "method": "DELETE",
- "path": "/admin/clients/{id}",
- "bucket": "hydra-admin-low"
- },
- {
- "method": "PATCH",
- "path": "/admin/clients/{id}",
- "bucket": "hydra-admin-low"
- },
- {
- "method": "PUT",
- "path": "/admin/clients/{id}",
- "bucket": "hydra-admin-low"
- },
- {
- "method": "HEAD",
- "path": "/.well-known/openid-configuration",
- "bucket": "hydra-public-high"
- },
- {
- "method": "PUT",
- "path": "/admin/clients/{id}/lifespans",
- "bucket": "hydra-admin-low"
- },
- {
- "method": "GET",
- "path": "/admin/keys/{set}",
- "bucket": "hydra-admin-medium"
- },
- {
- "method": "DELETE",
- "path": "/admin/keys/{set}",
- "bucket": "hydra-admin-low"
- },
- {
- "method": "POST",
- "path": "/admin/keys/{set}",
- "bucket": "hydra-admin-low"
- },
- {
- "method": "PUT",
- "path": "/admin/keys/{set}",
- "bucket": "hydra-admin-low"
- },
- {
- "method": "GET",
- "path": "/admin/keys/{set}/{kid}",
- "bucket": "hydra-admin-medium"
- },
- {
- "method": "DELETE",
- "path": "/admin/keys/{set}/{kid}",
- "bucket": "hydra-admin-low"
- },
- {
- "method": "PUT",
- "path": "/admin/keys/{set}/{kid}",
- "bucket": "hydra-admin-low"
- },
- {
- "method": "GET",
- "path": "/admin/oauth2/auth/requests/consent",
- "bucket": "hydra-admin-high"
- },
- {
- "method": "PUT",
- "path": "/admin/oauth2/auth/requests/consent/accept",
- "bucket": "hydra-admin-high"
- },
- {
- "method": "PUT",
- "path": "/admin/oauth2/auth/requests/consent/reject",
- "bucket": "hydra-admin-high"
- },
- {
- "method": "PUT",
- "path": "/admin/oauth2/auth/requests/device/accept",
- "bucket": "hydra-admin-high"
- },
- {
- "method": "GET",
- "path": "/admin/oauth2/auth/requests/login",
- "bucket": "hydra-admin-high"
- },
- {
- "method": "PUT",
- "path": "/admin/oauth2/auth/requests/login/accept",
- "bucket": "hydra-admin-high"
- },
- {
- "method": "PUT",
- "path": "/admin/oauth2/auth/requests/login/reject",
- "bucket": "hydra-admin-high"
- },
- {
- "method": "GET",
- "path": "/admin/oauth2/auth/requests/logout",
- "bucket": "hydra-admin-high"
- },
- {
- "method": "PUT",
- "path": "/admin/oauth2/auth/requests/logout/accept",
- "bucket": "hydra-admin-high"
- },
- {
- "method": "PUT",
- "path": "/admin/oauth2/auth/requests/logout/reject",
- "bucket": "hydra-admin-high"
- },
- {
- "method": "GET",
- "path": "/admin/oauth2/auth/sessions/consent",
- "bucket": "hydra-admin-high"
- },
- {
- "method": "DELETE",
- "path": "/admin/oauth2/auth/sessions/consent",
- "bucket": "hydra-admin-low"
- },
- {
- "method": "DELETE",
- "path": "/admin/oauth2/auth/sessions/login",
- "bucket": "hydra-admin-low"
- },
- {
- "method": "POST",
- "path": "/admin/oauth2/introspect",
- "bucket": "hydra-admin-high"
- },
- {
- "method": "DELETE",
- "path": "/admin/oauth2/tokens",
- "bucket": "hydra-admin-low"
- },
- {
- "method": "GET",
- "path": "/admin/trust/grants/jwt-bearer/issuers",
- "bucket": "hydra-admin-medium"
- },
- {
- "method": "POST",
- "path": "/admin/trust/grants/jwt-bearer/issuers",
- "bucket": "hydra-admin-low"
- },
- {
- "method": "GET",
- "path": "/admin/trust/grants/jwt-bearer/issuers/{id}",
- "bucket": "hydra-admin-medium"
- },
- {
- "method": "DELETE",
- "path": "/admin/trust/grants/jwt-bearer/issuers/{id}",
- "bucket": "hydra-admin-low"
- },
- {
- "method": "OPTIONS",
- "path": "/admin/clients",
- "bucket": "hydra-admin-high"
- },
- {
- "method": "OPTIONS",
- "path": "/admin/clients/{id}",
- "bucket": "hydra-admin-high"
- },
- {
- "method": "POST",
- "path": "/credentials",
- "bucket": "hydra-admin-medium"
- },
- {
- "method": "GET",
- "path": "/oauth2/auth",
- "bucket": "hydra-public-medium"
- },
- {
- "method": "HEAD",
- "path": "/oauth2/auth",
- "bucket": "hydra-public-high"
- },
- {
- "method": "POST",
- "path": "/oauth2/device/auth",
- "bucket": "hydra-public-high"
- },
- {
- "method": "GET",
- "path": "/oauth2/device/verify",
- "bucket": "hydra-admin-high"
- },
- {
- "method": "OPTIONS",
- "path": "/oauth2/auth",
- "bucket": "hydra-public-high"
- },
- {
- "method": "POST",
- "path": "/oauth2/register",
- "bucket": "hydra-public-low"
- },
- {
- "method": "GET",
- "path": "/oauth2/register/{id}",
- "bucket": "hydra-admin-high"
- },
- {
- "method": "DELETE",
- "path": "/oauth2/register/{id}",
- "bucket": "hydra-public-low"
- },
- {
- "method": "PUT",
- "path": "/oauth2/register/{id}",
- "bucket": "hydra-public-low"
- },
- {
- "method": "POST",
- "path": "/oauth2/revoke",
- "bucket": "hydra-public-medium"
- },
- {
- "method": "GET",
- "path": "/oauth2/sessions/logout",
- "bucket": "hydra-public-medium"
- },
- {
- "method": "POST",
- "path": "/oauth2/auth",
- "bucket": "hydra-public-medium"
- },
- {
- "method": "POST",
- "path": "/oauth2/token",
- "bucket": "hydra-public-medium"
- },
- {
- "method": "GET",
- "path": "/oauth2/consent",
- "bucket": "hydra-public-high"
- },
- {
- "method": "GET",
- "path": "/oauth2/fallbacks/logout/callback",
- "bucket": "hydra-public-high"
- },
- {
- "method": "POST",
- "path": "/oauth2/sessions/logout",
- "bucket": "hydra-public-medium"
- },
- {
- "method": "OPTIONS",
- "path": "/oauth2/token",
- "bucket": "hydra-public-high"
- },
- {
- "method": "GET",
- "path": "/userinfo",
- "bucket": "hydra-public-medium"
- },
- {
- "method": "DELETE",
- "path": "/admin/relation-tuples",
- "bucket": "keto-admin-low"
- },
- {
- "method": "PATCH",
- "path": "/admin/relation-tuples",
- "bucket": "keto-admin-low"
- },
- {
- "method": "PUT",
- "path": "/admin/relation-tuples",
- "bucket": "keto-admin-low"
- },
- {
- "method": "GET",
- "path": "/namespaces",
- "bucket": "keto-admin-low"
- },
- {
- "method": "POST",
- "path": "/opl/syntax/check",
- "bucket": "keto-admin-medium"
- },
- {
- "method": "POST",
- "path": "/ory.keto.relation_tuples.v1alpha2.CheckService/BatchCheck",
- "bucket": "keto-public-high"
- },
- {
- "method": "POST",
- "path": "/ory.keto.relation_tuples.v1alpha2.CheckService/Check",
- "bucket": "keto-public-high"
- },
- {
- "method": "POST",
- "path": "/ory.keto.relation_tuples.v1alpha2.WriteService/TransactRelationTuples",
- "bucket": "keto-admin-low"
- },
- {
- "method": "GET",
- "path": "/relation-tuples",
- "bucket": "keto-admin-medium"
- },
- {
- "method": "POST",
- "path": "/relation-tuples/batch/check",
- "bucket": "keto-public-high"
- },
- {
- "method": "GET",
- "path": "/relation-tuples/check",
- "bucket": "keto-public-high"
- },
- {
- "method": "POST",
- "path": "/relation-tuples/check",
- "bucket": "keto-public-high"
- },
- {
- "method": "GET",
- "path": "/relation-tuples/check/openapi",
- "bucket": "keto-public-high"
- },
- {
- "method": "POST",
- "path": "/relation-tuples/check/openapi",
- "bucket": "keto-public-high"
- },
- {
- "method": "GET",
- "path": "/relation-tuples/expand",
- "bucket": "keto-admin-medium"
- },
- {
- "method": "GET",
- "path": "/admin/courier/messages",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "PATCH",
- "path": "/admin/identities",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "POST",
- "path": "/admin/identities",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "DELETE",
- "path": "/admin/identities/{id}",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "PATCH",
- "path": "/admin/identities/{id}",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "PUT",
- "path": "/admin/identities/{id}",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "DELETE",
- "path": "/admin/identities/{id}/credentials/{type}",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "DELETE",
- "path": "/admin/identities/{id}/sessions",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "POST",
- "path": "/admin/recovery/code",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "POST",
- "path": "/admin/recovery/link",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "DELETE",
- "path": "/admin/sessions/{id}",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "PATCH",
- "path": "/admin/sessions/{id}/extend",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "POST",
- "path": "/scim/{client}/v2/Groups",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "PUT",
- "path": "/scim/{client}/v2/Groups/{id}",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "PATCH",
- "path": "/scim/{client}/v2/Groups/{id}",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "DELETE",
- "path": "/scim/{client}/v2/Groups/{id}",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "POST",
- "path": "/scim/{client}/v2/Users",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "PUT",
- "path": "/scim/{client}/v2/Users/{id}",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "PATCH",
- "path": "/scim/{client}/v2/Users/{id}",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "DELETE",
- "path": "/scim/{client}/v2/Users/{id}",
- "bucket": "kratos-admin-low"
- },
- {
- "method": "GET",
- "path": "/admin/identities/{id}",
- "bucket": "kratos-admin-high"
- },
- {
- "method": "GET",
- "path": "/admin/sessions/{id}",
- "bucket": "kratos-admin-high"
- },
- {
- "method": "OPTIONS",
- "path": "/admin/identities/{id}",
- "bucket": "kratos-admin-high"
- },
- {
- "method": "GET",
- "path": "/admin/courier/messages/{id}",
- "bucket": "kratos-admin-medium"
- },
- {
- "method": "GET",
- "path": "/admin/identities",
- "bucket": "kratos-admin-medium"
- },
- {
- "method": "GET",
- "path": "/admin/identities/{id}/sessions",
- "bucket": "kratos-admin-medium"
- },
- {
- "method": "GET",
- "path": "/admin/identities/by/external/{externalID}",
- "bucket": "kratos-admin-medium"
- },
- {
- "method": "GET",
- "path": "/admin/sessions",
- "bucket": "kratos-admin-medium"
- },
- {
- "method": "GET",
- "path": "/schemas",
- "bucket": "kratos-admin-medium"
- },
- {
- "method": "GET",
- "path": "/schemas/{id}",
- "bucket": "kratos-admin-medium"
- },
- {
- "method": "GET",
- "path": "/scim/{client}/v2/Groups",
- "bucket": "kratos-admin-medium"
- },
- {
- "method": "GET",
- "path": "/scim/{client}/v2/Groups/{id}",
- "bucket": "kratos-admin-medium"
- },
- {
- "method": "GET",
- "path": "/scim/{client}/v2/Schemas",
- "bucket": "kratos-admin-medium"
- },
- {
- "method": "GET",
- "path": "/scim/{client}/v2/Schemas/{id}",
- "bucket": "kratos-admin-medium"
- },
- {
- "method": "GET",
- "path": "/scim/{client}/v2/ServiceProviderConfig",
- "bucket": "kratos-admin-medium"
- },
- {
- "method": "GET",
- "path": "/scim/{client}/v2/Users",
- "bucket": "kratos-admin-medium"
- },
- {
- "method": "GET",
- "path": "/scim/{client}/v2/Users/{id}",
- "bucket": "kratos-admin-medium"
- },
- {
- "method": "GET",
- "path": "/self-service/errors",
- "bucket": "kratos-public-high"
- },
- {
- "method": "GET",
- "path": "/self-service/fed-cm/parameters",
- "bucket": "kratos-public-high"
- },
- {
- "method": "POST",
- "path": "/self-service/fed-cm/token",
- "bucket": "kratos-public-low"
- },
- {
- "method": "POST",
- "path": "/self-service/login",
- "bucket": "kratos-public-low"
- },
- {
- "method": "GET",
- "path": "/self-service/login/api",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "GET",
- "path": "/self-service/login/browser",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "GET",
- "path": "/self-service/login/flows",
- "bucket": "kratos-public-high"
- },
- {
- "method": "HEAD",
- "path": "/self-service/fed-cm/parameters",
- "bucket": "kratos-public-high"
- },
- {
- "method": "GET",
- "path": "/self-service/logout",
- "bucket": "kratos-public-high"
- },
- {
- "method": "OPTIONS",
- "path": "/self-service/fed-cm/token",
- "bucket": "kratos-public-high"
- },
- {
- "method": "DELETE",
- "path": "/self-service/logout/api",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "GET",
- "path": "/self-service/logout/browser",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "GET",
- "path": "/self-service/login",
- "bucket": "kratos-public-high"
- },
- {
- "method": "OPTIONS",
- "path": "/self-service/login",
- "bucket": "kratos-public-high"
- },
- {
- "method": "GET",
- "path": "/self-service/methods/oidc/callback/{provider_id}",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "GET",
- "path": "/self-service/methods/oidc/organizations/{organization_id}",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "GET",
- "path": "/self-service/methods/saml/callback/{provider_id}",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "GET",
- "path": "/self-service/methods/saml/organizations/{organization_id}",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "POST",
- "path": "/self-service/recovery",
- "bucket": "kratos-public-low"
- },
- {
- "method": "HEAD",
- "path": "/self-service/login/browser",
- "bucket": "kratos-public-high"
- },
- {
- "method": "OPTIONS",
- "path": "/self-service/login/browser",
- "bucket": "kratos-public-high"
- },
- {
- "method": "POST",
- "path": "/self-service/login/browser",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "GET",
- "path": "/self-service/recovery/api",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "GET",
- "path": "/self-service/recovery/browser",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "OPTIONS",
- "path": "/self-service/login/flows",
- "bucket": "kratos-public-high"
- },
- {
- "method": "GET",
- "path": "/self-service/recovery/flows",
- "bucket": "kratos-public-high"
- },
- {
- "method": "OPTIONS",
- "path": "/self-service/logout",
- "bucket": "kratos-public-high"
- },
- {
- "method": "POST",
- "path": "/self-service/registration",
- "bucket": "kratos-public-low"
- },
- {
- "method": "OPTIONS",
- "path": "/self-service/logout/browser",
- "bucket": "kratos-public-high"
- },
- {
- "method": "GET",
- "path": "/self-service/methods/oidc/callback",
- "bucket": "kratos-public-high"
- },
- {
- "method": "GET",
- "path": "/self-service/registration/api",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "GET",
- "path": "/self-service/registration/browser",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "GET",
- "path": "/self-service/registration/flows",
- "bucket": "kratos-public-high"
- },
- {
- "method": "POST",
- "path": "/self-service/settings",
- "bucket": "kratos-public-low"
- },
- {
- "method": "HEAD",
- "path": "/self-service/methods/oidc/callback/{provider_id}",
- "bucket": "kratos-public-high"
- },
- {
- "method": "GET",
- "path": "/self-service/recovery",
- "bucket": "kratos-public-high"
- },
- {
- "method": "GET",
- "path": "/self-service/settings/api",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "GET",
- "path": "/self-service/settings/browser",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "GET",
- "path": "/self-service/settings/flows",
- "bucket": "kratos-public-high"
- },
- {
- "method": "POST",
- "path": "/self-service/verification",
- "bucket": "kratos-public-low"
- },
- {
- "method": "HEAD",
- "path": "/self-service/recovery",
- "bucket": "kratos-public-high"
- },
- {
- "method": "OPTIONS",
- "path": "/self-service/recovery",
- "bucket": "kratos-public-high"
- },
- {
- "method": "HEAD",
- "path": "/self-service/recovery/browser",
- "bucket": "kratos-public-high"
- },
- {
- "method": "GET",
- "path": "/self-service/verification/api",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "GET",
- "path": "/self-service/verification/browser",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "OPTIONS",
- "path": "/self-service/recovery/browser",
- "bucket": "kratos-public-high"
- },
- {
- "method": "GET",
- "path": "/self-service/verification/flows",
- "bucket": "kratos-public-high"
- },
- {
- "method": "OPTIONS",
- "path": "/self-service/recovery/flows",
- "bucket": "kratos-public-high"
- },
- {
- "method": "GET",
- "path": "/sessions",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "DELETE",
- "path": "/sessions",
- "bucket": "kratos-public-low"
- },
- {
- "method": "DELETE",
- "path": "/sessions/{id}",
- "bucket": "kratos-public-low"
- },
- {
- "method": "GET",
- "path": "/sessions/token-exchange",
- "bucket": "kratos-public-medium"
- },
- {
- "method": "GET",
- "path": "/self-service/registration",
- "bucket": "kratos-public-high"
- },
- {
- "method": "OPTIONS",
- "path": "/self-service/registration",
- "bucket": "kratos-public-high"
- },
- {
- "method": "HEAD",
- "path": "/self-service/registration/browser",
- "bucket": "kratos-public-high"
- },
- {
- "method": "GET",
- "path": "/sessions/whoami",
- "bucket": "kratos-public-high"
- },
- {
- "method": "OPTIONS",
- "path": "/self-service/registration/browser",
- "bucket": "kratos-public-high"
- },
- {
- "method": "GET",
- "path": "/self-service/settings",
- "bucket": "kratos-public-high"
- },
- {
- "method": "OPTIONS",
- "path": "/self-service/settings",
- "bucket": "kratos-public-high"
- },
- {
- "method": "GET",
- "path": "/self-service/verification",
- "bucket": "kratos-public-high"
- },
- {
- "method": "HEAD",
- "path": "/self-service/verification",
- "bucket": "kratos-public-high"
- },
- {
- "method": "OPTIONS",
- "path": "/self-service/verification",
- "bucket": "kratos-public-high"
- },
- {
- "method": "HEAD",
- "path": "/self-service/verification/browser",
- "bucket": "kratos-public-high"
- },
- {
- "method": "OPTIONS",
- "path": "/self-service/verification/flows",
- "bucket": "kratos-public-high"
- },
- {
- "method": "OPTIONS",
- "path": "/sessions",
- "bucket": "kratos-public-high"
- },
- {
- "method": "GET",
- "path": "/saml/.well-known/idp-metadata",
- "bucket": "polis-public-high"
- },
- {
- "method": "GET",
- "path": "/saml/.well-known/saml.cer",
- "bucket": "polis-public-high"
- },
- {
- "method": "GET",
- "path": "/saml/.well-known/sp-metadata",
- "bucket": "polis-public-high"
- },
- {
- "method": "GET",
- "path": "/saml/api/error",
- "bucket": "polis-public-high"
- },
- {
- "method": "POST",
- "path": "/saml/api/identity-federation/sso",
- "bucket": "polis-public-medium"
- },
- {
- "method": "GET",
- "path": "/saml/api/identity-federation/sso",
- "bucket": "polis-public-medium"
- },
- {
- "method": "POST",
- "path": "/saml/api/oauth/authorize",
- "bucket": "polis-public-medium"
- },
- {
- "method": "GET",
- "path": "/saml/api/oauth/authorize",
- "bucket": "polis-public-medium"
- },
- {
- "method": "GET",
- "path": "/saml/api/oauth/oidc",
- "bucket": "polis-public-medium"
- },
- {
- "method": "POST",
- "path": "/saml/api/oauth/saml",
- "bucket": "polis-public-medium"
- }
- ],
- "thresholds": [
- {
- "bucket": "hydra-admin-high",
- "tier": "Developer",
- "env": "Development",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-admin-high",
- "tier": "Developer",
- "env": "Production",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-admin-high",
- "tier": "Developer",
- "env": "Staging",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-admin-high",
- "tier": "Enterprise",
- "env": "Development",
- "rpm": 80,
- "rps": 4
- },
- {
- "bucket": "hydra-admin-high",
- "tier": "Enterprise",
- "env": "Production",
- "rpm": 4800,
- "rps": 160
- },
- {
- "bucket": "hydra-admin-high",
- "tier": "Enterprise",
- "env": "Staging",
- "rpm": 80,
- "rps": 4
- },
- {
- "bucket": "hydra-admin-high",
- "tier": "Growth",
- "env": "Development",
- "rpm": 80,
- "rps": 4
- },
- {
- "bucket": "hydra-admin-high",
- "tier": "Growth",
- "env": "Production",
- "rpm": 2400,
- "rps": 80
- },
- {
- "bucket": "hydra-admin-high",
- "tier": "Growth",
- "env": "Staging",
- "rpm": 80,
- "rps": 4
- },
- {
- "bucket": "hydra-admin-high",
- "tier": "Production",
- "env": "Development",
- "rpm": 80,
- "rps": 4
- },
- {
- "bucket": "hydra-admin-high",
- "tier": "Production",
- "env": "Production",
- "rpm": 250,
- "rps": 10
- },
- {
- "bucket": "hydra-admin-high",
- "tier": "Production",
- "env": "Staging",
- "rpm": 80,
- "rps": 4
- },
- {
- "bucket": "hydra-admin-low",
- "tier": "Developer",
- "env": "Development",
- "rpm": 20,
- "rps": 2
- },
- {
- "bucket": "hydra-admin-low",
- "tier": "Developer",
- "env": "Production",
- "rpm": 20,
- "rps": 2
- },
- {
- "bucket": "hydra-admin-low",
- "tier": "Developer",
- "env": "Staging",
- "rpm": 20,
- "rps": 2
- },
- {
- "bucket": "hydra-admin-low",
- "tier": "Enterprise",
- "env": "Development",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-admin-low",
- "tier": "Enterprise",
- "env": "Production",
- "rpm": 320,
- "rps": 10
- },
- {
- "bucket": "hydra-admin-low",
- "tier": "Enterprise",
- "env": "Staging",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-admin-low",
- "tier": "Growth",
- "env": "Development",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-admin-low",
- "tier": "Growth",
- "env": "Production",
- "rpm": 160,
- "rps": 7
- },
- {
- "bucket": "hydra-admin-low",
- "tier": "Growth",
- "env": "Staging",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-admin-low",
- "tier": "Production",
- "env": "Development",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-admin-low",
- "tier": "Production",
- "env": "Production",
- "rpm": 80,
- "rps": 4
- },
- {
- "bucket": "hydra-admin-low",
- "tier": "Production",
- "env": "Staging",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-admin-medium",
- "tier": "Developer",
- "env": "Development",
- "rpm": 20,
- "rps": 2
- },
- {
- "bucket": "hydra-admin-medium",
- "tier": "Developer",
- "env": "Production",
- "rpm": 20,
- "rps": 2
- },
- {
- "bucket": "hydra-admin-medium",
- "tier": "Developer",
- "env": "Staging",
- "rpm": 20,
- "rps": 2
- },
- {
- "bucket": "hydra-admin-medium",
- "tier": "Enterprise",
- "env": "Development",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-admin-medium",
- "tier": "Enterprise",
- "env": "Production",
- "rpm": 320,
- "rps": 10
- },
- {
- "bucket": "hydra-admin-medium",
- "tier": "Enterprise",
- "env": "Staging",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-admin-medium",
- "tier": "Growth",
- "env": "Development",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-admin-medium",
- "tier": "Growth",
- "env": "Production",
- "rpm": 160,
- "rps": 7
- },
- {
- "bucket": "hydra-admin-medium",
- "tier": "Growth",
- "env": "Staging",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-admin-medium",
- "tier": "Production",
- "env": "Development",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-admin-medium",
- "tier": "Production",
- "env": "Production",
- "rpm": 80,
- "rps": 4
- },
- {
- "bucket": "hydra-admin-medium",
- "tier": "Production",
- "env": "Staging",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-public-high",
- "tier": "Developer",
- "env": "Development",
- "rpm": 60,
- "rps": 3
- },
- {
- "bucket": "hydra-public-high",
- "tier": "Developer",
- "env": "Production",
- "rpm": 60,
- "rps": 3
- },
- {
- "bucket": "hydra-public-high",
- "tier": "Developer",
- "env": "Staging",
- "rpm": 60,
- "rps": 3
- },
- {
- "bucket": "hydra-public-high",
- "tier": "Enterprise",
- "env": "Development",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "hydra-public-high",
- "tier": "Enterprise",
- "env": "Production",
- "rpm": 1500,
- "rps": 55
- },
- {
- "bucket": "hydra-public-high",
- "tier": "Enterprise",
- "env": "Staging",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "hydra-public-high",
- "tier": "Growth",
- "env": "Development",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "hydra-public-high",
- "tier": "Growth",
- "env": "Production",
- "rpm": 720,
- "rps": 30
- },
- {
- "bucket": "hydra-public-high",
- "tier": "Growth",
- "env": "Staging",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "hydra-public-high",
- "tier": "Production",
- "env": "Development",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "hydra-public-high",
- "tier": "Production",
- "env": "Production",
- "rpm": 250,
- "rps": 10
- },
- {
- "bucket": "hydra-public-high",
- "tier": "Production",
- "env": "Staging",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "hydra-public-low",
- "tier": "Developer",
- "env": "Development",
- "rpm": 20,
- "rps": 2
- },
- {
- "bucket": "hydra-public-low",
- "tier": "Developer",
- "env": "Production",
- "rpm": 20,
- "rps": 2
- },
- {
- "bucket": "hydra-public-low",
- "tier": "Developer",
- "env": "Staging",
- "rpm": 20,
- "rps": 2
- },
- {
- "bucket": "hydra-public-low",
- "tier": "Enterprise",
- "env": "Development",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-public-low",
- "tier": "Enterprise",
- "env": "Production",
- "rpm": 320,
- "rps": 10
- },
- {
- "bucket": "hydra-public-low",
- "tier": "Enterprise",
- "env": "Staging",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-public-low",
- "tier": "Growth",
- "env": "Development",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-public-low",
- "tier": "Growth",
- "env": "Production",
- "rpm": 160,
- "rps": 7
- },
- {
- "bucket": "hydra-public-low",
- "tier": "Growth",
- "env": "Staging",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-public-low",
- "tier": "Production",
- "env": "Development",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-public-low",
- "tier": "Production",
- "env": "Production",
- "rpm": 80,
- "rps": 4
- },
- {
- "bucket": "hydra-public-low",
- "tier": "Production",
- "env": "Staging",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-public-medium",
- "tier": "Developer",
- "env": "Development",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-public-medium",
- "tier": "Developer",
- "env": "Production",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-public-medium",
- "tier": "Developer",
- "env": "Staging",
- "rpm": 40,
- "rps": 3
- },
- {
- "bucket": "hydra-public-medium",
- "tier": "Enterprise",
- "env": "Development",
- "rpm": 80,
- "rps": 4
- },
- {
- "bucket": "hydra-public-medium",
- "tier": "Enterprise",
- "env": "Production",
- "rpm": 3000,
- "rps": 100
- },
- {
- "bucket": "hydra-public-medium",
- "tier": "Enterprise",
- "env": "Staging",
- "rpm": 80,
- "rps": 4
- },
- {
- "bucket": "hydra-public-medium",
- "tier": "Growth",
- "env": "Development",
- "rpm": 80,
- "rps": 4
- },
- {
- "bucket": "hydra-public-medium",
- "tier": "Growth",
- "env": "Production",
- "rpm": 1000,
- "rps": 35
- },
- {
- "bucket": "hydra-public-medium",
- "tier": "Growth",
- "env": "Staging",
- "rpm": 80,
- "rps": 4
- },
- {
- "bucket": "hydra-public-medium",
- "tier": "Production",
- "env": "Development",
- "rpm": 80,
- "rps": 4
- },
- {
- "bucket": "hydra-public-medium",
- "tier": "Production",
- "env": "Production",
- "rpm": 320,
- "rps": 10
- },
- {
- "bucket": "hydra-public-medium",
- "tier": "Production",
- "env": "Staging",
- "rpm": 80,
- "rps": 4
- },
- {
- "bucket": "keto-admin-low",
- "tier": "Developer",
- "env": "Development",
- "rpm": 60,
- "rps": 3
- },
- {
- "bucket": "keto-admin-low",
- "tier": "Developer",
- "env": "Production",
- "rpm": 60,
- "rps": 3
- },
- {
- "bucket": "keto-admin-low",
- "tier": "Developer",
- "env": "Staging",
- "rpm": 60,
- "rps": 3
- },
- {
- "bucket": "keto-admin-low",
- "tier": "Enterprise",
- "env": "Development",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "keto-admin-low",
- "tier": "Enterprise",
- "env": "Production",
- "rpm": 1000,
- "rps": 35
- },
- {
- "bucket": "keto-admin-low",
- "tier": "Enterprise",
- "env": "Staging",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "keto-admin-low",
- "tier": "Growth",
- "env": "Development",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "keto-admin-low",
- "tier": "Growth",
- "env": "Production",
- "rpm": 250,
- "rps": 10
- },
- {
- "bucket": "keto-admin-low",
- "tier": "Growth",
- "env": "Staging",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "keto-admin-low",
- "tier": "Production",
- "env": "Development",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "keto-admin-low",
- "tier": "Production",
- "env": "Production",
- "rpm": 250,
- "rps": 10
- },
- {
- "bucket": "keto-admin-low",
- "tier": "Production",
- "env": "Staging",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "keto-admin-medium",
- "tier": "Developer",
- "env": "Development",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "keto-admin-medium",
- "tier": "Developer",
- "env": "Production",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "keto-admin-medium",
- "tier": "Developer",
- "env": "Staging",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "keto-admin-medium",
- "tier": "Enterprise",
- "env": "Development",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "keto-admin-medium",
- "tier": "Enterprise",
- "env": "Production",
- "rpm": 2000,
- "rps": 70
- },
- {
- "bucket": "keto-admin-medium",
- "tier": "Enterprise",
- "env": "Staging",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "keto-admin-medium",
- "tier": "Growth",
- "env": "Development",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "keto-admin-medium",
- "tier": "Growth",
- "env": "Production",
- "rpm": 1000,
- "rps": 35
- },
- {
- "bucket": "keto-admin-medium",
- "tier": "Growth",
- "env": "Staging",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "keto-admin-medium",
- "tier": "Production",
- "env": "Development",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "keto-admin-medium",
- "tier": "Production",
- "env": "Production",
- "rpm": 500,
- "rps": 20
- },
- {
- "bucket": "keto-admin-medium",
- "tier": "Production",
- "env": "Staging",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "keto-public-high",
- "tier": "Developer",
- "env": "Development",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "keto-public-high",
- "tier": "Developer",
- "env": "Production",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "keto-public-high",
- "tier": "Developer",
- "env": "Staging",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "keto-public-high",
- "tier": "Enterprise",
- "env": "Development",
- "rpm": 240,
- "rps": 10
- },
- {
- "bucket": "keto-public-high",
- "tier": "Enterprise",
- "env": "Production",
- "rpm": 18000,
- "rps": 600
- },
- {
- "bucket": "keto-public-high",
- "tier": "Enterprise",
- "env": "Staging",
- "rpm": 240,
- "rps": 10
- },
- {
- "bucket": "keto-public-high",
- "tier": "Growth",
- "env": "Development",
- "rpm": 240,
- "rps": 10
- },
- {
- "bucket": "keto-public-high",
- "tier": "Growth",
- "env": "Production",
- "rpm": 9000,
- "rps": 300
- },
- {
- "bucket": "keto-public-high",
- "tier": "Growth",
- "env": "Staging",
- "rpm": 240,
- "rps": 10
- },
- {
- "bucket": "keto-public-high",
- "tier": "Production",
- "env": "Development",
- "rpm": 240,
- "rps": 10
- },
- {
- "bucket": "keto-public-high",
- "tier": "Production",
- "env": "Production",
- "rpm": 1500,
- "rps": 55
- },
- {
- "bucket": "keto-public-high",
- "tier": "Production",
- "env": "Staging",
- "rpm": 240,
- "rps": 10
- },
- {
- "bucket": "kratos-admin-high",
- "tier": "Developer",
- "env": "Development",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-admin-high",
- "tier": "Developer",
- "env": "Production",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-admin-high",
- "tier": "Developer",
- "env": "Staging",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-admin-high",
- "tier": "Enterprise",
- "env": "Development",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-admin-high",
- "tier": "Enterprise",
- "env": "Production",
- "rpm": 2400,
- "rps": 80
- },
- {
- "bucket": "kratos-admin-high",
- "tier": "Enterprise",
- "env": "Staging",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-admin-high",
- "tier": "Growth",
- "env": "Development",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-admin-high",
- "tier": "Growth",
- "env": "Production",
- "rpm": 1200,
- "rps": 45
- },
- {
- "bucket": "kratos-admin-high",
- "tier": "Growth",
- "env": "Staging",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-admin-high",
- "tier": "Production",
- "env": "Development",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-admin-high",
- "tier": "Production",
- "env": "Production",
- "rpm": 400,
- "rps": 15
- },
- {
- "bucket": "kratos-admin-high",
- "tier": "Production",
- "env": "Staging",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-admin-low",
- "tier": "Developer",
- "env": "Development",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-admin-low",
- "tier": "Developer",
- "env": "Production",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-admin-low",
- "tier": "Developer",
- "env": "Staging",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-admin-low",
- "tier": "Enterprise",
- "env": "Development",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-admin-low",
- "tier": "Enterprise",
- "env": "Production",
- "rpm": 2400,
- "rps": 80
- },
- {
- "bucket": "kratos-admin-low",
- "tier": "Enterprise",
- "env": "Staging",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-admin-low",
- "tier": "Growth",
- "env": "Development",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-admin-low",
- "tier": "Growth",
- "env": "Production",
- "rpm": 1200,
- "rps": 45
- },
- {
- "bucket": "kratos-admin-low",
- "tier": "Growth",
- "env": "Staging",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-admin-low",
- "tier": "Production",
- "env": "Development",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-admin-low",
- "tier": "Production",
- "env": "Production",
- "rpm": 400,
- "rps": 15
- },
- {
- "bucket": "kratos-admin-low",
- "tier": "Production",
- "env": "Staging",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-admin-medium",
- "tier": "Developer",
- "env": "Development",
- "rpm": 50,
- "rps": 3
- },
- {
- "bucket": "kratos-admin-medium",
- "tier": "Developer",
- "env": "Production",
- "rpm": 50,
- "rps": 3
- },
- {
- "bucket": "kratos-admin-medium",
- "tier": "Developer",
- "env": "Staging",
- "rpm": 50,
- "rps": 3
- },
- {
- "bucket": "kratos-admin-medium",
- "tier": "Enterprise",
- "env": "Development",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-admin-medium",
- "tier": "Enterprise",
- "env": "Production",
- "rpm": 800,
- "rps": 30
- },
- {
- "bucket": "kratos-admin-medium",
- "tier": "Enterprise",
- "env": "Staging",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-admin-medium",
- "tier": "Growth",
- "env": "Development",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-admin-medium",
- "tier": "Growth",
- "env": "Production",
- "rpm": 400,
- "rps": 15
- },
- {
- "bucket": "kratos-admin-medium",
- "tier": "Growth",
- "env": "Staging",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-admin-medium",
- "tier": "Production",
- "env": "Development",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-admin-medium",
- "tier": "Production",
- "env": "Production",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-admin-medium",
- "tier": "Production",
- "env": "Staging",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-public-high",
- "tier": "Developer",
- "env": "Development",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-public-high",
- "tier": "Developer",
- "env": "Production",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-public-high",
- "tier": "Developer",
- "env": "Staging",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-public-high",
- "tier": "Enterprise",
- "env": "Development",
- "rpm": 400,
- "rps": 15
- },
- {
- "bucket": "kratos-public-high",
- "tier": "Enterprise",
- "env": "Production",
- "rpm": 21600,
- "rps": 700
- },
- {
- "bucket": "kratos-public-high",
- "tier": "Enterprise",
- "env": "Staging",
- "rpm": 400,
- "rps": 15
- },
- {
- "bucket": "kratos-public-high",
- "tier": "Growth",
- "env": "Development",
- "rpm": 400,
- "rps": 15
- },
- {
- "bucket": "kratos-public-high",
- "tier": "Growth",
- "env": "Production",
- "rpm": 7200,
- "rps": 240
- },
- {
- "bucket": "kratos-public-high",
- "tier": "Growth",
- "env": "Staging",
- "rpm": 400,
- "rps": 15
- },
- {
- "bucket": "kratos-public-high",
- "tier": "Production",
- "env": "Development",
- "rpm": 400,
- "rps": 15
- },
- {
- "bucket": "kratos-public-high",
- "tier": "Production",
- "env": "Production",
- "rpm": 2400,
- "rps": 80
- },
- {
- "bucket": "kratos-public-high",
- "tier": "Production",
- "env": "Staging",
- "rpm": 400,
- "rps": 15
- },
- {
- "bucket": "kratos-public-low",
- "tier": "Developer",
- "env": "Development",
- "rpm": 50,
- "rps": 3
- },
- {
- "bucket": "kratos-public-low",
- "tier": "Developer",
- "env": "Production",
- "rpm": 50,
- "rps": 3
- },
- {
- "bucket": "kratos-public-low",
- "tier": "Developer",
- "env": "Staging",
- "rpm": 50,
- "rps": 3
- },
- {
- "bucket": "kratos-public-low",
- "tier": "Enterprise",
- "env": "Development",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-public-low",
- "tier": "Enterprise",
- "env": "Production",
- "rpm": 1200,
- "rps": 45
- },
- {
- "bucket": "kratos-public-low",
- "tier": "Enterprise",
- "env": "Staging",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-public-low",
- "tier": "Growth",
- "env": "Development",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-public-low",
- "tier": "Growth",
- "env": "Production",
- "rpm": 600,
- "rps": 25
- },
- {
- "bucket": "kratos-public-low",
- "tier": "Growth",
- "env": "Staging",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-public-low",
- "tier": "Production",
- "env": "Development",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-public-low",
- "tier": "Production",
- "env": "Production",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-public-low",
- "tier": "Production",
- "env": "Staging",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-public-medium",
- "tier": "Developer",
- "env": "Development",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-public-medium",
- "tier": "Developer",
- "env": "Production",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-public-medium",
- "tier": "Developer",
- "env": "Staging",
- "rpm": 100,
- "rps": 5
- },
- {
- "bucket": "kratos-public-medium",
- "tier": "Enterprise",
- "env": "Development",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-public-medium",
- "tier": "Enterprise",
- "env": "Production",
- "rpm": 1600,
- "rps": 55
- },
- {
- "bucket": "kratos-public-medium",
- "tier": "Enterprise",
- "env": "Staging",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-public-medium",
- "tier": "Growth",
- "env": "Development",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-public-medium",
- "tier": "Growth",
- "env": "Production",
- "rpm": 800,
- "rps": 30
- },
- {
- "bucket": "kratos-public-medium",
- "tier": "Growth",
- "env": "Staging",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-public-medium",
- "tier": "Production",
- "env": "Development",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "kratos-public-medium",
- "tier": "Production",
- "env": "Production",
- "rpm": 400,
- "rps": 15
- },
- {
- "bucket": "kratos-public-medium",
- "tier": "Production",
- "env": "Staging",
- "rpm": 200,
- "rps": 10
- },
- {
- "bucket": "polis-public-high",
- "tier": "Developer",
- "env": "Development",
- "rpm": 15,
- "rps": 2
- },
- {
- "bucket": "polis-public-high",
- "tier": "Developer",
- "env": "Production",
- "rpm": 15,
- "rps": 2
- },
- {
- "bucket": "polis-public-high",
- "tier": "Developer",
- "env": "Staging",
- "rpm": 15,
- "rps": 2
- },
- {
- "bucket": "polis-public-high",
- "tier": "Enterprise",
- "env": "Development",
- "rpm": 30,
- "rps": 2
- },
- {
- "bucket": "polis-public-high",
- "tier": "Enterprise",
- "env": "Production",
- "rpm": 250,
- "rps": 10
- },
- {
- "bucket": "polis-public-high",
- "tier": "Enterprise",
- "env": "Staging",
- "rpm": 30,
- "rps": 2
- },
- {
- "bucket": "polis-public-high",
- "tier": "Growth",
- "env": "Development",
- "rpm": 30,
- "rps": 2
- },
- {
- "bucket": "polis-public-high",
- "tier": "Growth",
- "env": "Production",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "polis-public-high",
- "tier": "Growth",
- "env": "Staging",
- "rpm": 30,
- "rps": 2
- },
- {
- "bucket": "polis-public-high",
- "tier": "Production",
- "env": "Development",
- "rpm": 30,
- "rps": 2
- },
- {
- "bucket": "polis-public-high",
- "tier": "Production",
- "env": "Production",
- "rpm": 60,
- "rps": 3
- },
- {
- "bucket": "polis-public-high",
- "tier": "Production",
- "env": "Staging",
- "rpm": 30,
- "rps": 2
- },
- {
- "bucket": "polis-public-medium",
- "tier": "Developer",
- "env": "Development",
- "rpm": 60,
- "rps": 3
- },
- {
- "bucket": "polis-public-medium",
- "tier": "Developer",
- "env": "Production",
- "rpm": 60,
- "rps": 3
- },
- {
- "bucket": "polis-public-medium",
- "tier": "Developer",
- "env": "Staging",
- "rpm": 60,
- "rps": 3
- },
- {
- "bucket": "polis-public-medium",
- "tier": "Enterprise",
- "env": "Development",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "polis-public-medium",
- "tier": "Enterprise",
- "env": "Production",
- "rpm": 1000,
- "rps": 35
- },
- {
- "bucket": "polis-public-medium",
- "tier": "Enterprise",
- "env": "Staging",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "polis-public-medium",
- "tier": "Growth",
- "env": "Development",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "polis-public-medium",
- "tier": "Growth",
- "env": "Production",
- "rpm": 500,
- "rps": 20
- },
- {
- "bucket": "polis-public-medium",
- "tier": "Growth",
- "env": "Staging",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "polis-public-medium",
- "tier": "Production",
- "env": "Development",
- "rpm": 120,
- "rps": 7
- },
- {
- "bucket": "polis-public-medium",
- "tier": "Production",
- "env": "Production",
- "rpm": 250,
- "rps": 10
- },
- {
- "bucket": "polis-public-medium",
- "tier": "Production",
- "env": "Staging",
- "rpm": 120,
- "rps": 7
- }
- ]
-}
+{"endpoints":[{"method":"GET","path":"/.well-known/jwks.json","bucket":"hydra-public-high"},{"method":"GET","path":"/.well-known/openid-configuration","bucket":"hydra-public-high"},{"method":"GET","path":"/.well-known/ory/webauthn.js","bucket":"hydra-public-high"},{"method":"GET","path":"/admin/clients","bucket":"hydra-admin-medium"},{"method":"POST","path":"/admin/clients","bucket":"hydra-admin-low"},{"method":"GET","path":"/admin/clients/{id}","bucket":"hydra-admin-high"},{"method":"DELETE","path":"/admin/clients/{id}","bucket":"hydra-admin-low"},{"method":"PATCH","path":"/admin/clients/{id}","bucket":"hydra-admin-low"},{"method":"PUT","path":"/admin/clients/{id}","bucket":"hydra-admin-low"},{"method":"HEAD","path":"/.well-known/openid-configuration","bucket":"hydra-public-high"},{"method":"PUT","path":"/admin/clients/{id}/lifespans","bucket":"hydra-admin-low"},{"method":"GET","path":"/admin/keys/{set}","bucket":"hydra-admin-medium"},{"method":"DELETE","path":"/admin/keys/{set}","bucket":"hydra-admin-low"},{"method":"POST","path":"/admin/keys/{set}","bucket":"hydra-admin-low"},{"method":"PUT","path":"/admin/keys/{set}","bucket":"hydra-admin-low"},{"method":"GET","path":"/admin/keys/{set}/{kid}","bucket":"hydra-admin-medium"},{"method":"DELETE","path":"/admin/keys/{set}/{kid}","bucket":"hydra-admin-low"},{"method":"PUT","path":"/admin/keys/{set}/{kid}","bucket":"hydra-admin-low"},{"method":"GET","path":"/admin/oauth2/auth/requests/consent","bucket":"hydra-admin-high"},{"method":"PUT","path":"/admin/oauth2/auth/requests/consent/accept","bucket":"hydra-admin-high"},{"method":"PUT","path":"/admin/oauth2/auth/requests/consent/reject","bucket":"hydra-admin-high"},{"method":"PUT","path":"/admin/oauth2/auth/requests/device/accept","bucket":"hydra-admin-high"},{"method":"GET","path":"/admin/oauth2/auth/requests/login","bucket":"hydra-admin-high"},{"method":"PUT","path":"/admin/oauth2/auth/requests/login/accept","bucket":"hydra-admin-high"},{"method":"PUT","path":"/admin/oauth2/auth/requests/login/reject","bucket":"hydra-admin-high"},{"method":"GET","path":"/admin/oauth2/auth/requests/logout","bucket":"hydra-admin-high"},{"method":"PUT","path":"/admin/oauth2/auth/requests/logout/accept","bucket":"hydra-admin-high"},{"method":"PUT","path":"/admin/oauth2/auth/requests/logout/reject","bucket":"hydra-admin-high"},{"method":"GET","path":"/admin/oauth2/auth/sessions/consent","bucket":"hydra-admin-high"},{"method":"DELETE","path":"/admin/oauth2/auth/sessions/consent","bucket":"hydra-admin-low"},{"method":"DELETE","path":"/admin/oauth2/auth/sessions/login","bucket":"hydra-admin-low"},{"method":"POST","path":"/admin/oauth2/introspect","bucket":"hydra-admin-high"},{"method":"DELETE","path":"/admin/oauth2/tokens","bucket":"hydra-admin-low"},{"method":"GET","path":"/admin/trust/grants/jwt-bearer/issuers","bucket":"hydra-admin-medium"},{"method":"POST","path":"/admin/trust/grants/jwt-bearer/issuers","bucket":"hydra-admin-low"},{"method":"GET","path":"/admin/trust/grants/jwt-bearer/issuers/{id}","bucket":"hydra-admin-medium"},{"method":"DELETE","path":"/admin/trust/grants/jwt-bearer/issuers/{id}","bucket":"hydra-admin-low"},{"method":"OPTIONS","path":"/admin/clients","bucket":"hydra-admin-high"},{"method":"OPTIONS","path":"/admin/clients/{id}","bucket":"hydra-admin-high"},{"method":"POST","path":"/credentials","bucket":"hydra-admin-medium"},{"method":"GET","path":"/oauth2/auth","bucket":"hydra-public-medium"},{"method":"HEAD","path":"/oauth2/auth","bucket":"hydra-public-high"},{"method":"POST","path":"/oauth2/device/auth","bucket":"hydra-public-high"},{"method":"GET","path":"/oauth2/device/verify","bucket":"hydra-admin-high"},{"method":"OPTIONS","path":"/oauth2/auth","bucket":"hydra-public-high"},{"method":"POST","path":"/oauth2/register","bucket":"hydra-public-low"},{"method":"GET","path":"/oauth2/register/{id}","bucket":"hydra-admin-high"},{"method":"DELETE","path":"/oauth2/register/{id}","bucket":"hydra-public-low"},{"method":"PUT","path":"/oauth2/register/{id}","bucket":"hydra-public-low"},{"method":"POST","path":"/oauth2/revoke","bucket":"hydra-public-medium"},{"method":"GET","path":"/oauth2/sessions/logout","bucket":"hydra-public-medium"},{"method":"POST","path":"/oauth2/auth","bucket":"hydra-public-medium"},{"method":"POST","path":"/oauth2/token","bucket":"hydra-public-medium"},{"method":"GET","path":"/oauth2/consent","bucket":"hydra-public-high"},{"method":"GET","path":"/oauth2/fallbacks/logout/callback","bucket":"hydra-public-high"},{"method":"POST","path":"/oauth2/sessions/logout","bucket":"hydra-public-medium"},{"method":"OPTIONS","path":"/oauth2/token","bucket":"hydra-public-high"},{"method":"GET","path":"/userinfo","bucket":"hydra-public-medium"},{"method":"DELETE","path":"/admin/relation-tuples","bucket":"keto-admin-low"},{"method":"PATCH","path":"/admin/relation-tuples","bucket":"keto-admin-low"},{"method":"PUT","path":"/admin/relation-tuples","bucket":"keto-admin-low"},{"method":"GET","path":"/namespaces","bucket":"keto-admin-low"},{"method":"POST","path":"/opl/syntax/check","bucket":"keto-admin-medium"},{"method":"POST","path":"/ory.keto.relation_tuples.v1alpha2.CheckService/BatchCheck","bucket":"keto-public-high"},{"method":"POST","path":"/ory.keto.relation_tuples.v1alpha2.CheckService/Check","bucket":"keto-public-high"},{"method":"POST","path":"/ory.keto.relation_tuples.v1alpha2.WriteService/TransactRelationTuples","bucket":"keto-admin-low"},{"method":"GET","path":"/relation-tuples","bucket":"keto-admin-medium"},{"method":"POST","path":"/relation-tuples/batch/check","bucket":"keto-public-high"},{"method":"GET","path":"/relation-tuples/check","bucket":"keto-public-high"},{"method":"POST","path":"/relation-tuples/check","bucket":"keto-public-high"},{"method":"GET","path":"/relation-tuples/check/openapi","bucket":"keto-public-high"},{"method":"POST","path":"/relation-tuples/check/openapi","bucket":"keto-public-high"},{"method":"GET","path":"/relation-tuples/expand","bucket":"keto-admin-medium"},{"method":"GET","path":"/admin/courier/messages","bucket":"kratos-admin-low"},{"method":"PATCH","path":"/admin/identities","bucket":"kratos-admin-low"},{"method":"POST","path":"/admin/identities","bucket":"kratos-admin-low"},{"method":"DELETE","path":"/admin/identities/{id}","bucket":"kratos-admin-low"},{"method":"PATCH","path":"/admin/identities/{id}","bucket":"kratos-admin-low"},{"method":"PUT","path":"/admin/identities/{id}","bucket":"kratos-admin-low"},{"method":"DELETE","path":"/admin/identities/{id}/credentials/{type}","bucket":"kratos-admin-low"},{"method":"DELETE","path":"/admin/identities/{id}/sessions","bucket":"kratos-admin-low"},{"method":"POST","path":"/admin/recovery/code","bucket":"kratos-admin-low"},{"method":"POST","path":"/admin/recovery/link","bucket":"kratos-admin-low"},{"method":"DELETE","path":"/admin/sessions/{id}","bucket":"kratos-admin-low"},{"method":"PATCH","path":"/admin/sessions/{id}/extend","bucket":"kratos-admin-low"},{"method":"POST","path":"/scim/{client}/v2/Groups","bucket":"kratos-admin-low"},{"method":"PUT","path":"/scim/{client}/v2/Groups/{id}","bucket":"kratos-admin-low"},{"method":"PATCH","path":"/scim/{client}/v2/Groups/{id}","bucket":"kratos-admin-low"},{"method":"DELETE","path":"/scim/{client}/v2/Groups/{id}","bucket":"kratos-admin-low"},{"method":"POST","path":"/scim/{client}/v2/Users","bucket":"kratos-admin-low"},{"method":"PUT","path":"/scim/{client}/v2/Users/{id}","bucket":"kratos-admin-low"},{"method":"PATCH","path":"/scim/{client}/v2/Users/{id}","bucket":"kratos-admin-low"},{"method":"DELETE","path":"/scim/{client}/v2/Users/{id}","bucket":"kratos-admin-low"},{"method":"GET","path":"/admin/identities/{id}","bucket":"kratos-admin-high"},{"method":"GET","path":"/admin/sessions/{id}","bucket":"kratos-admin-high"},{"method":"OPTIONS","path":"/admin/identities/{id}","bucket":"kratos-admin-high"},{"method":"GET","path":"/admin/courier/messages/{id}","bucket":"kratos-admin-medium"},{"method":"GET","path":"/admin/identities","bucket":"kratos-admin-medium"},{"method":"GET","path":"/admin/identities/{id}/sessions","bucket":"kratos-admin-medium"},{"method":"GET","path":"/admin/identities/by/external/{externalID}","bucket":"kratos-admin-medium"},{"method":"GET","path":"/admin/sessions","bucket":"kratos-admin-medium"},{"method":"GET","path":"/schemas","bucket":"kratos-admin-medium"},{"method":"GET","path":"/schemas/{id}","bucket":"kratos-admin-medium"},{"method":"GET","path":"/scim/{client}/v2/Groups","bucket":"kratos-admin-medium"},{"method":"GET","path":"/scim/{client}/v2/Groups/{id}","bucket":"kratos-admin-medium"},{"method":"GET","path":"/scim/{client}/v2/Schemas","bucket":"kratos-admin-medium"},{"method":"GET","path":"/scim/{client}/v2/Schemas/{id}","bucket":"kratos-admin-medium"},{"method":"GET","path":"/scim/{client}/v2/ServiceProviderConfig","bucket":"kratos-admin-medium"},{"method":"GET","path":"/scim/{client}/v2/Users","bucket":"kratos-admin-medium"},{"method":"GET","path":"/scim/{client}/v2/Users/{id}","bucket":"kratos-admin-medium"},{"method":"GET","path":"/self-service/errors","bucket":"kratos-public-high"},{"method":"GET","path":"/self-service/fed-cm/parameters","bucket":"kratos-public-high"},{"method":"POST","path":"/self-service/fed-cm/token","bucket":"kratos-public-low"},{"method":"POST","path":"/self-service/login","bucket":"kratos-public-low"},{"method":"GET","path":"/self-service/login/api","bucket":"kratos-public-medium"},{"method":"GET","path":"/self-service/login/browser","bucket":"kratos-public-medium"},{"method":"GET","path":"/self-service/login/flows","bucket":"kratos-public-high"},{"method":"HEAD","path":"/self-service/fed-cm/parameters","bucket":"kratos-public-high"},{"method":"GET","path":"/self-service/logout","bucket":"kratos-public-high"},{"method":"OPTIONS","path":"/self-service/fed-cm/token","bucket":"kratos-public-high"},{"method":"DELETE","path":"/self-service/logout/api","bucket":"kratos-public-medium"},{"method":"GET","path":"/self-service/logout/browser","bucket":"kratos-public-medium"},{"method":"GET","path":"/self-service/login","bucket":"kratos-public-high"},{"method":"OPTIONS","path":"/self-service/login","bucket":"kratos-public-high"},{"method":"GET","path":"/self-service/methods/oidc/callback/{provider_id}","bucket":"kratos-public-medium"},{"method":"GET","path":"/self-service/methods/oidc/organizations/{organization_id}","bucket":"kratos-public-medium"},{"method":"GET","path":"/self-service/methods/saml/callback/{provider_id}","bucket":"kratos-public-medium"},{"method":"GET","path":"/self-service/methods/saml/organizations/{organization_id}","bucket":"kratos-public-medium"},{"method":"POST","path":"/self-service/recovery","bucket":"kratos-public-low"},{"method":"HEAD","path":"/self-service/login/browser","bucket":"kratos-public-high"},{"method":"OPTIONS","path":"/self-service/login/browser","bucket":"kratos-public-high"},{"method":"POST","path":"/self-service/login/browser","bucket":"kratos-public-medium"},{"method":"GET","path":"/self-service/recovery/api","bucket":"kratos-public-medium"},{"method":"GET","path":"/self-service/recovery/browser","bucket":"kratos-public-medium"},{"method":"OPTIONS","path":"/self-service/login/flows","bucket":"kratos-public-high"},{"method":"GET","path":"/self-service/recovery/flows","bucket":"kratos-public-high"},{"method":"OPTIONS","path":"/self-service/logout","bucket":"kratos-public-high"},{"method":"POST","path":"/self-service/registration","bucket":"kratos-public-low"},{"method":"OPTIONS","path":"/self-service/logout/browser","bucket":"kratos-public-high"},{"method":"GET","path":"/self-service/methods/oidc/callback","bucket":"kratos-public-high"},{"method":"GET","path":"/self-service/registration/api","bucket":"kratos-public-medium"},{"method":"GET","path":"/self-service/registration/browser","bucket":"kratos-public-medium"},{"method":"GET","path":"/self-service/registration/flows","bucket":"kratos-public-high"},{"method":"POST","path":"/self-service/settings","bucket":"kratos-public-low"},{"method":"HEAD","path":"/self-service/methods/oidc/callback/{provider_id}","bucket":"kratos-public-high"},{"method":"GET","path":"/self-service/recovery","bucket":"kratos-public-high"},{"method":"GET","path":"/self-service/settings/api","bucket":"kratos-public-medium"},{"method":"GET","path":"/self-service/settings/browser","bucket":"kratos-public-medium"},{"method":"GET","path":"/self-service/settings/flows","bucket":"kratos-public-high"},{"method":"POST","path":"/self-service/verification","bucket":"kratos-public-low"},{"method":"HEAD","path":"/self-service/recovery","bucket":"kratos-public-high"},{"method":"OPTIONS","path":"/self-service/recovery","bucket":"kratos-public-high"},{"method":"HEAD","path":"/self-service/recovery/browser","bucket":"kratos-public-high"},{"method":"GET","path":"/self-service/verification/api","bucket":"kratos-public-medium"},{"method":"GET","path":"/self-service/verification/browser","bucket":"kratos-public-medium"},{"method":"OPTIONS","path":"/self-service/recovery/browser","bucket":"kratos-public-high"},{"method":"GET","path":"/self-service/verification/flows","bucket":"kratos-public-high"},{"method":"OPTIONS","path":"/self-service/recovery/flows","bucket":"kratos-public-high"},{"method":"GET","path":"/sessions","bucket":"kratos-public-medium"},{"method":"DELETE","path":"/sessions","bucket":"kratos-public-low"},{"method":"DELETE","path":"/sessions/{id}","bucket":"kratos-public-low"},{"method":"GET","path":"/sessions/token-exchange","bucket":"kratos-public-medium"},{"method":"GET","path":"/self-service/registration","bucket":"kratos-public-high"},{"method":"OPTIONS","path":"/self-service/registration","bucket":"kratos-public-high"},{"method":"HEAD","path":"/self-service/registration/browser","bucket":"kratos-public-high"},{"method":"GET","path":"/sessions/whoami","bucket":"kratos-public-high"},{"method":"OPTIONS","path":"/self-service/registration/browser","bucket":"kratos-public-high"},{"method":"GET","path":"/self-service/settings","bucket":"kratos-public-high"},{"method":"OPTIONS","path":"/self-service/settings","bucket":"kratos-public-high"},{"method":"GET","path":"/self-service/verification","bucket":"kratos-public-high"},{"method":"HEAD","path":"/self-service/verification","bucket":"kratos-public-high"},{"method":"OPTIONS","path":"/self-service/verification","bucket":"kratos-public-high"},{"method":"HEAD","path":"/self-service/verification/browser","bucket":"kratos-public-high"},{"method":"OPTIONS","path":"/self-service/verification/flows","bucket":"kratos-public-high"},{"method":"OPTIONS","path":"/sessions","bucket":"kratos-public-high"},{"method":"GET","path":"/saml/.well-known/idp-metadata","bucket":"polis-public-high"},{"method":"GET","path":"/saml/.well-known/saml.cer","bucket":"polis-public-high"},{"method":"GET","path":"/saml/.well-known/sp-metadata","bucket":"polis-public-high"},{"method":"GET","path":"/saml/api/error","bucket":"polis-public-high"},{"method":"POST","path":"/saml/api/identity-federation/sso","bucket":"polis-public-medium"},{"method":"GET","path":"/saml/api/identity-federation/sso","bucket":"polis-public-medium"},{"method":"POST","path":"/saml/api/oauth/authorize","bucket":"polis-public-medium"},{"method":"GET","path":"/saml/api/oauth/authorize","bucket":"polis-public-medium"},{"method":"GET","path":"/saml/api/oauth/oidc","bucket":"polis-public-medium"},{"method":"POST","path":"/saml/api/oauth/saml","bucket":"polis-public-medium"}],"thresholds":[{"bucket":"hydra-admin-high","tier":"Developer","env":"Development","rpm":40,"rps":3},{"bucket":"hydra-admin-high","tier":"Developer","env":"Production","rpm":40,"rps":3},{"bucket":"hydra-admin-high","tier":"Developer","env":"Staging","rpm":40,"rps":3},{"bucket":"hydra-admin-high","tier":"Enterprise","env":"Development","rpm":80,"rps":4},{"bucket":"hydra-admin-high","tier":"Enterprise","env":"Production","rpm":4800,"rps":160},{"bucket":"hydra-admin-high","tier":"Enterprise","env":"Staging","rpm":80,"rps":4},{"bucket":"hydra-admin-high","tier":"Growth","env":"Development","rpm":80,"rps":4},{"bucket":"hydra-admin-high","tier":"Growth","env":"Production","rpm":2400,"rps":80},{"bucket":"hydra-admin-high","tier":"Growth","env":"Staging","rpm":80,"rps":4},{"bucket":"hydra-admin-high","tier":"Production","env":"Development","rpm":80,"rps":4},{"bucket":"hydra-admin-high","tier":"Production","env":"Production","rpm":250,"rps":10},{"bucket":"hydra-admin-high","tier":"Production","env":"Staging","rpm":80,"rps":4},{"bucket":"hydra-admin-low","tier":"Developer","env":"Development","rpm":20,"rps":2},{"bucket":"hydra-admin-low","tier":"Developer","env":"Production","rpm":20,"rps":2},{"bucket":"hydra-admin-low","tier":"Developer","env":"Staging","rpm":20,"rps":2},{"bucket":"hydra-admin-low","tier":"Enterprise","env":"Development","rpm":40,"rps":3},{"bucket":"hydra-admin-low","tier":"Enterprise","env":"Production","rpm":320,"rps":10},{"bucket":"hydra-admin-low","tier":"Enterprise","env":"Staging","rpm":40,"rps":3},{"bucket":"hydra-admin-low","tier":"Growth","env":"Development","rpm":40,"rps":3},{"bucket":"hydra-admin-low","tier":"Growth","env":"Production","rpm":160,"rps":7},{"bucket":"hydra-admin-low","tier":"Growth","env":"Staging","rpm":40,"rps":3},{"bucket":"hydra-admin-low","tier":"Production","env":"Development","rpm":40,"rps":3},{"bucket":"hydra-admin-low","tier":"Production","env":"Production","rpm":80,"rps":4},{"bucket":"hydra-admin-low","tier":"Production","env":"Staging","rpm":40,"rps":3},{"bucket":"hydra-admin-medium","tier":"Developer","env":"Development","rpm":20,"rps":2},{"bucket":"hydra-admin-medium","tier":"Developer","env":"Production","rpm":20,"rps":2},{"bucket":"hydra-admin-medium","tier":"Developer","env":"Staging","rpm":20,"rps":2},{"bucket":"hydra-admin-medium","tier":"Enterprise","env":"Development","rpm":40,"rps":3},{"bucket":"hydra-admin-medium","tier":"Enterprise","env":"Production","rpm":320,"rps":10},{"bucket":"hydra-admin-medium","tier":"Enterprise","env":"Staging","rpm":40,"rps":3},{"bucket":"hydra-admin-medium","tier":"Growth","env":"Development","rpm":40,"rps":3},{"bucket":"hydra-admin-medium","tier":"Growth","env":"Production","rpm":160,"rps":7},{"bucket":"hydra-admin-medium","tier":"Growth","env":"Staging","rpm":40,"rps":3},{"bucket":"hydra-admin-medium","tier":"Production","env":"Development","rpm":40,"rps":3},{"bucket":"hydra-admin-medium","tier":"Production","env":"Production","rpm":80,"rps":4},{"bucket":"hydra-admin-medium","tier":"Production","env":"Staging","rpm":40,"rps":3},{"bucket":"hydra-public-high","tier":"Developer","env":"Development","rpm":60,"rps":3},{"bucket":"hydra-public-high","tier":"Developer","env":"Production","rpm":60,"rps":3},{"bucket":"hydra-public-high","tier":"Developer","env":"Staging","rpm":60,"rps":3},{"bucket":"hydra-public-high","tier":"Enterprise","env":"Development","rpm":120,"rps":7},{"bucket":"hydra-public-high","tier":"Enterprise","env":"Production","rpm":1500,"rps":55},{"bucket":"hydra-public-high","tier":"Enterprise","env":"Staging","rpm":120,"rps":7},{"bucket":"hydra-public-high","tier":"Growth","env":"Development","rpm":120,"rps":7},{"bucket":"hydra-public-high","tier":"Growth","env":"Production","rpm":720,"rps":30},{"bucket":"hydra-public-high","tier":"Growth","env":"Staging","rpm":120,"rps":7},{"bucket":"hydra-public-high","tier":"Production","env":"Development","rpm":120,"rps":7},{"bucket":"hydra-public-high","tier":"Production","env":"Production","rpm":250,"rps":10},{"bucket":"hydra-public-high","tier":"Production","env":"Staging","rpm":120,"rps":7},{"bucket":"hydra-public-low","tier":"Developer","env":"Development","rpm":20,"rps":2},{"bucket":"hydra-public-low","tier":"Developer","env":"Production","rpm":20,"rps":2},{"bucket":"hydra-public-low","tier":"Developer","env":"Staging","rpm":20,"rps":2},{"bucket":"hydra-public-low","tier":"Enterprise","env":"Development","rpm":40,"rps":3},{"bucket":"hydra-public-low","tier":"Enterprise","env":"Production","rpm":320,"rps":10},{"bucket":"hydra-public-low","tier":"Enterprise","env":"Staging","rpm":40,"rps":3},{"bucket":"hydra-public-low","tier":"Growth","env":"Development","rpm":40,"rps":3},{"bucket":"hydra-public-low","tier":"Growth","env":"Production","rpm":160,"rps":7},{"bucket":"hydra-public-low","tier":"Growth","env":"Staging","rpm":40,"rps":3},{"bucket":"hydra-public-low","tier":"Production","env":"Development","rpm":40,"rps":3},{"bucket":"hydra-public-low","tier":"Production","env":"Production","rpm":80,"rps":4},{"bucket":"hydra-public-low","tier":"Production","env":"Staging","rpm":40,"rps":3},{"bucket":"hydra-public-medium","tier":"Developer","env":"Development","rpm":40,"rps":3},{"bucket":"hydra-public-medium","tier":"Developer","env":"Production","rpm":40,"rps":3},{"bucket":"hydra-public-medium","tier":"Developer","env":"Staging","rpm":40,"rps":3},{"bucket":"hydra-public-medium","tier":"Enterprise","env":"Development","rpm":80,"rps":4},{"bucket":"hydra-public-medium","tier":"Enterprise","env":"Production","rpm":3000,"rps":100},{"bucket":"hydra-public-medium","tier":"Enterprise","env":"Staging","rpm":80,"rps":4},{"bucket":"hydra-public-medium","tier":"Growth","env":"Development","rpm":80,"rps":4},{"bucket":"hydra-public-medium","tier":"Growth","env":"Production","rpm":1000,"rps":35},{"bucket":"hydra-public-medium","tier":"Growth","env":"Staging","rpm":80,"rps":4},{"bucket":"hydra-public-medium","tier":"Production","env":"Development","rpm":80,"rps":4},{"bucket":"hydra-public-medium","tier":"Production","env":"Production","rpm":320,"rps":10},{"bucket":"hydra-public-medium","tier":"Production","env":"Staging","rpm":80,"rps":4},{"bucket":"keto-admin-low","tier":"Developer","env":"Development","rpm":60,"rps":3},{"bucket":"keto-admin-low","tier":"Developer","env":"Production","rpm":60,"rps":3},{"bucket":"keto-admin-low","tier":"Developer","env":"Staging","rpm":60,"rps":3},{"bucket":"keto-admin-low","tier":"Enterprise","env":"Development","rpm":120,"rps":7},{"bucket":"keto-admin-low","tier":"Enterprise","env":"Production","rpm":1000,"rps":35},{"bucket":"keto-admin-low","tier":"Enterprise","env":"Staging","rpm":120,"rps":7},{"bucket":"keto-admin-low","tier":"Growth","env":"Development","rpm":120,"rps":7},{"bucket":"keto-admin-low","tier":"Growth","env":"Production","rpm":250,"rps":10},{"bucket":"keto-admin-low","tier":"Growth","env":"Staging","rpm":120,"rps":7},{"bucket":"keto-admin-low","tier":"Production","env":"Development","rpm":120,"rps":7},{"bucket":"keto-admin-low","tier":"Production","env":"Production","rpm":250,"rps":10},{"bucket":"keto-admin-low","tier":"Production","env":"Staging","rpm":120,"rps":7},{"bucket":"keto-admin-medium","tier":"Developer","env":"Development","rpm":100,"rps":5},{"bucket":"keto-admin-medium","tier":"Developer","env":"Production","rpm":100,"rps":5},{"bucket":"keto-admin-medium","tier":"Developer","env":"Staging","rpm":100,"rps":5},{"bucket":"keto-admin-medium","tier":"Enterprise","env":"Development","rpm":200,"rps":10},{"bucket":"keto-admin-medium","tier":"Enterprise","env":"Production","rpm":2000,"rps":70},{"bucket":"keto-admin-medium","tier":"Enterprise","env":"Staging","rpm":200,"rps":10},{"bucket":"keto-admin-medium","tier":"Growth","env":"Development","rpm":200,"rps":10},{"bucket":"keto-admin-medium","tier":"Growth","env":"Production","rpm":1000,"rps":35},{"bucket":"keto-admin-medium","tier":"Growth","env":"Staging","rpm":200,"rps":10},{"bucket":"keto-admin-medium","tier":"Production","env":"Development","rpm":200,"rps":10},{"bucket":"keto-admin-medium","tier":"Production","env":"Production","rpm":500,"rps":20},{"bucket":"keto-admin-medium","tier":"Production","env":"Staging","rpm":200,"rps":10},{"bucket":"keto-public-high","tier":"Developer","env":"Development","rpm":120,"rps":7},{"bucket":"keto-public-high","tier":"Developer","env":"Production","rpm":120,"rps":7},{"bucket":"keto-public-high","tier":"Developer","env":"Staging","rpm":120,"rps":7},{"bucket":"keto-public-high","tier":"Enterprise","env":"Development","rpm":240,"rps":10},{"bucket":"keto-public-high","tier":"Enterprise","env":"Production","rpm":18000,"rps":600},{"bucket":"keto-public-high","tier":"Enterprise","env":"Staging","rpm":240,"rps":10},{"bucket":"keto-public-high","tier":"Growth","env":"Development","rpm":240,"rps":10},{"bucket":"keto-public-high","tier":"Growth","env":"Production","rpm":9000,"rps":300},{"bucket":"keto-public-high","tier":"Growth","env":"Staging","rpm":240,"rps":10},{"bucket":"keto-public-high","tier":"Production","env":"Development","rpm":240,"rps":10},{"bucket":"keto-public-high","tier":"Production","env":"Production","rpm":1500,"rps":55},{"bucket":"keto-public-high","tier":"Production","env":"Staging","rpm":240,"rps":10},{"bucket":"kratos-admin-high","tier":"Developer","env":"Development","rpm":100,"rps":5},{"bucket":"kratos-admin-high","tier":"Developer","env":"Production","rpm":100,"rps":5},{"bucket":"kratos-admin-high","tier":"Developer","env":"Staging","rpm":100,"rps":5},{"bucket":"kratos-admin-high","tier":"Enterprise","env":"Development","rpm":200,"rps":10},{"bucket":"kratos-admin-high","tier":"Enterprise","env":"Production","rpm":2400,"rps":80},{"bucket":"kratos-admin-high","tier":"Enterprise","env":"Staging","rpm":200,"rps":10},{"bucket":"kratos-admin-high","tier":"Growth","env":"Development","rpm":200,"rps":10},{"bucket":"kratos-admin-high","tier":"Growth","env":"Production","rpm":1200,"rps":45},{"bucket":"kratos-admin-high","tier":"Growth","env":"Staging","rpm":200,"rps":10},{"bucket":"kratos-admin-high","tier":"Production","env":"Development","rpm":200,"rps":10},{"bucket":"kratos-admin-high","tier":"Production","env":"Production","rpm":400,"rps":15},{"bucket":"kratos-admin-high","tier":"Production","env":"Staging","rpm":200,"rps":10},{"bucket":"kratos-admin-low","tier":"Developer","env":"Development","rpm":100,"rps":5},{"bucket":"kratos-admin-low","tier":"Developer","env":"Production","rpm":100,"rps":5},{"bucket":"kratos-admin-low","tier":"Developer","env":"Staging","rpm":100,"rps":5},{"bucket":"kratos-admin-low","tier":"Enterprise","env":"Development","rpm":200,"rps":10},{"bucket":"kratos-admin-low","tier":"Enterprise","env":"Production","rpm":2400,"rps":80},{"bucket":"kratos-admin-low","tier":"Enterprise","env":"Staging","rpm":200,"rps":10},{"bucket":"kratos-admin-low","tier":"Growth","env":"Development","rpm":200,"rps":10},{"bucket":"kratos-admin-low","tier":"Growth","env":"Production","rpm":1200,"rps":45},{"bucket":"kratos-admin-low","tier":"Growth","env":"Staging","rpm":200,"rps":10},{"bucket":"kratos-admin-low","tier":"Production","env":"Development","rpm":200,"rps":10},{"bucket":"kratos-admin-low","tier":"Production","env":"Production","rpm":400,"rps":15},{"bucket":"kratos-admin-low","tier":"Production","env":"Staging","rpm":200,"rps":10},{"bucket":"kratos-admin-medium","tier":"Developer","env":"Development","rpm":50,"rps":3},{"bucket":"kratos-admin-medium","tier":"Developer","env":"Production","rpm":50,"rps":3},{"bucket":"kratos-admin-medium","tier":"Developer","env":"Staging","rpm":50,"rps":3},{"bucket":"kratos-admin-medium","tier":"Enterprise","env":"Development","rpm":100,"rps":5},{"bucket":"kratos-admin-medium","tier":"Enterprise","env":"Production","rpm":800,"rps":30},{"bucket":"kratos-admin-medium","tier":"Enterprise","env":"Staging","rpm":100,"rps":5},{"bucket":"kratos-admin-medium","tier":"Growth","env":"Development","rpm":100,"rps":5},{"bucket":"kratos-admin-medium","tier":"Growth","env":"Production","rpm":400,"rps":15},{"bucket":"kratos-admin-medium","tier":"Growth","env":"Staging","rpm":100,"rps":5},{"bucket":"kratos-admin-medium","tier":"Production","env":"Development","rpm":100,"rps":5},{"bucket":"kratos-admin-medium","tier":"Production","env":"Production","rpm":200,"rps":10},{"bucket":"kratos-admin-medium","tier":"Production","env":"Staging","rpm":100,"rps":5},{"bucket":"kratos-public-high","tier":"Developer","env":"Development","rpm":200,"rps":10},{"bucket":"kratos-public-high","tier":"Developer","env":"Production","rpm":200,"rps":10},{"bucket":"kratos-public-high","tier":"Developer","env":"Staging","rpm":200,"rps":10},{"bucket":"kratos-public-high","tier":"Enterprise","env":"Development","rpm":400,"rps":15},{"bucket":"kratos-public-high","tier":"Enterprise","env":"Production","rpm":21600,"rps":700},{"bucket":"kratos-public-high","tier":"Enterprise","env":"Staging","rpm":400,"rps":15},{"bucket":"kratos-public-high","tier":"Growth","env":"Development","rpm":400,"rps":15},{"bucket":"kratos-public-high","tier":"Growth","env":"Production","rpm":7200,"rps":240},{"bucket":"kratos-public-high","tier":"Growth","env":"Staging","rpm":400,"rps":15},{"bucket":"kratos-public-high","tier":"Production","env":"Development","rpm":400,"rps":15},{"bucket":"kratos-public-high","tier":"Production","env":"Production","rpm":2400,"rps":80},{"bucket":"kratos-public-high","tier":"Production","env":"Staging","rpm":400,"rps":15},{"bucket":"kratos-public-low","tier":"Developer","env":"Development","rpm":50,"rps":3},{"bucket":"kratos-public-low","tier":"Developer","env":"Production","rpm":50,"rps":3},{"bucket":"kratos-public-low","tier":"Developer","env":"Staging","rpm":50,"rps":3},{"bucket":"kratos-public-low","tier":"Enterprise","env":"Development","rpm":100,"rps":5},{"bucket":"kratos-public-low","tier":"Enterprise","env":"Production","rpm":1200,"rps":45},{"bucket":"kratos-public-low","tier":"Enterprise","env":"Staging","rpm":100,"rps":5},{"bucket":"kratos-public-low","tier":"Growth","env":"Development","rpm":100,"rps":5},{"bucket":"kratos-public-low","tier":"Growth","env":"Production","rpm":600,"rps":25},{"bucket":"kratos-public-low","tier":"Growth","env":"Staging","rpm":100,"rps":5},{"bucket":"kratos-public-low","tier":"Production","env":"Development","rpm":100,"rps":5},{"bucket":"kratos-public-low","tier":"Production","env":"Production","rpm":200,"rps":10},{"bucket":"kratos-public-low","tier":"Production","env":"Staging","rpm":100,"rps":5},{"bucket":"kratos-public-medium","tier":"Developer","env":"Development","rpm":100,"rps":5},{"bucket":"kratos-public-medium","tier":"Developer","env":"Production","rpm":100,"rps":5},{"bucket":"kratos-public-medium","tier":"Developer","env":"Staging","rpm":100,"rps":5},{"bucket":"kratos-public-medium","tier":"Enterprise","env":"Development","rpm":200,"rps":10},{"bucket":"kratos-public-medium","tier":"Enterprise","env":"Production","rpm":1600,"rps":55},{"bucket":"kratos-public-medium","tier":"Enterprise","env":"Staging","rpm":200,"rps":10},{"bucket":"kratos-public-medium","tier":"Growth","env":"Development","rpm":200,"rps":10},{"bucket":"kratos-public-medium","tier":"Growth","env":"Production","rpm":800,"rps":30},{"bucket":"kratos-public-medium","tier":"Growth","env":"Staging","rpm":200,"rps":10},{"bucket":"kratos-public-medium","tier":"Production","env":"Development","rpm":200,"rps":10},{"bucket":"kratos-public-medium","tier":"Production","env":"Production","rpm":400,"rps":15},{"bucket":"kratos-public-medium","tier":"Production","env":"Staging","rpm":200,"rps":10},{"bucket":"polis-public-high","tier":"Developer","env":"Development","rpm":15,"rps":2},{"bucket":"polis-public-high","tier":"Developer","env":"Production","rpm":15,"rps":2},{"bucket":"polis-public-high","tier":"Developer","env":"Staging","rpm":15,"rps":2},{"bucket":"polis-public-high","tier":"Enterprise","env":"Development","rpm":30,"rps":2},{"bucket":"polis-public-high","tier":"Enterprise","env":"Production","rpm":250,"rps":10},{"bucket":"polis-public-high","tier":"Enterprise","env":"Staging","rpm":30,"rps":2},{"bucket":"polis-public-high","tier":"Growth","env":"Development","rpm":30,"rps":2},{"bucket":"polis-public-high","tier":"Growth","env":"Production","rpm":120,"rps":7},{"bucket":"polis-public-high","tier":"Growth","env":"Staging","rpm":30,"rps":2},{"bucket":"polis-public-high","tier":"Production","env":"Development","rpm":30,"rps":2},{"bucket":"polis-public-high","tier":"Production","env":"Production","rpm":60,"rps":3},{"bucket":"polis-public-high","tier":"Production","env":"Staging","rpm":30,"rps":2},{"bucket":"polis-public-medium","tier":"Developer","env":"Development","rpm":60,"rps":3},{"bucket":"polis-public-medium","tier":"Developer","env":"Production","rpm":60,"rps":3},{"bucket":"polis-public-medium","tier":"Developer","env":"Staging","rpm":60,"rps":3},{"bucket":"polis-public-medium","tier":"Enterprise","env":"Development","rpm":120,"rps":7},{"bucket":"polis-public-medium","tier":"Enterprise","env":"Production","rpm":1000,"rps":35},{"bucket":"polis-public-medium","tier":"Enterprise","env":"Staging","rpm":120,"rps":7},{"bucket":"polis-public-medium","tier":"Growth","env":"Development","rpm":120,"rps":7},{"bucket":"polis-public-medium","tier":"Growth","env":"Production","rpm":500,"rps":20},{"bucket":"polis-public-medium","tier":"Growth","env":"Staging","rpm":120,"rps":7},{"bucket":"polis-public-medium","tier":"Production","env":"Development","rpm":120,"rps":7},{"bucket":"polis-public-medium","tier":"Production","env":"Production","rpm":250,"rps":10},{"bucket":"polis-public-medium","tier":"Production","env":"Staging","rpm":120,"rps":7}]}
\ No newline at end of file
From e2b30c81383d4b8594dad8dd771a7ab5e805c414 Mon Sep 17 00:00:00 2001
From: unatasha8
Date: Tue, 17 Mar 2026 10:11:28 -0700
Subject: [PATCH 13/37] docs: updated plugins
---
package-lock.json | 55 ++----------------------
package.json | 1 +
src/plugins/docusaurus-polyfill/index.js | 27 ++++++++----
3 files changed, 24 insertions(+), 59 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 3c1ff65f91..90ed4d7b3f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,6 +14,7 @@
"@docusaurus/plugin-content-docs": "3.9.2",
"@docusaurus/plugin-content-pages": "3.9.2",
"@docusaurus/plugin-sitemap": "3.9.2",
+ "@docusaurus/plugin-svgr": "^3.9.2",
"@docusaurus/preset-classic": "3.9.2",
"@docusaurus/theme-classic": "3.9.2",
"@docusaurus/theme-search-algolia": "3.9.2",
@@ -270,7 +271,6 @@
"version": "5.44.0",
"resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.44.0.tgz",
"integrity": "sha512-/FRKUM1G4xn3vV8+9xH1WJ9XknU8rkBGlefruq9jDhYUAvYozKimhrmC2pRqw/RyHhPivmgZCRuC8jHP8piz4Q==",
- "peer": true,
"dependencies": {
"@algolia/client-common": "5.44.0",
"@algolia/requester-browser-xhr": "5.44.0",
@@ -447,7 +447,6 @@
"node_modules/@babel/core": {
"version": "7.26.0",
"license": "MIT",
- "peer": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.26.0",
@@ -2434,7 +2433,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "peer": true,
"engines": {
"node": ">=18"
},
@@ -2456,7 +2454,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -2561,7 +2558,6 @@
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
"integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
- "peer": true,
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -2967,7 +2963,6 @@
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
"integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
- "peer": true,
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -3906,7 +3901,6 @@
"version": "3.9.2",
"resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz",
"integrity": "sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==",
- "peer": true,
"dependencies": {
"@docusaurus/core": "3.9.2",
"@docusaurus/logger": "3.9.2",
@@ -4074,6 +4068,7 @@
"version": "3.9.2",
"resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.9.2.tgz",
"integrity": "sha512-n+1DE+5b3Lnf27TgVU5jM1d4x5tUh2oW5LTsBxJX4PsAPV0JGcmI6p3yLYtEY0LRVEIJh+8RsdQmRE66wSV8mw==",
+ "license": "MIT",
"dependencies": {
"@docusaurus/core": "3.9.2",
"@docusaurus/types": "3.9.2",
@@ -4191,7 +4186,6 @@
"version": "3.9.2",
"resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.9.2.tgz",
"integrity": "sha512-6c4DAbR6n6nPbnZhY2V3tzpnKnGL+6aOsLvFL26VRqhlczli9eWG0VDUNoCQEPnGwDMhPS42UhSAnz5pThm5Ag==",
- "peer": true,
"dependencies": {
"@docusaurus/mdx-loader": "3.9.2",
"@docusaurus/module-type-aliases": "3.9.2",
@@ -4295,7 +4289,6 @@
"version": "3.9.2",
"resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.9.2.tgz",
"integrity": "sha512-lBSBiRruFurFKXr5Hbsl2thmGweAPmddhF3jb99U4EMDA5L+e5Y1rAkOS07Nvrup7HUMBDrCV45meaxZnt28nQ==",
- "peer": true,
"dependencies": {
"@docusaurus/logger": "3.9.2",
"@docusaurus/types": "3.9.2",
@@ -5478,7 +5471,6 @@
"node_modules/@mdx-js/react": {
"version": "3.1.0",
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/mdx": "^2.0.0"
},
@@ -5538,7 +5530,6 @@
"node_modules/@octokit/core": {
"version": "5.2.0",
"license": "MIT",
- "peer": true,
"dependencies": {
"@octokit/auth-token": "^4.0.0",
"@octokit/graphql": "^7.1.0",
@@ -5887,7 +5878,6 @@
"node_modules/@rjsf/core": {
"version": "5.24.1",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"lodash": "^4.17.21",
"lodash-es": "^4.17.21",
@@ -5908,7 +5898,6 @@
"resolved": "https://registry.npmjs.org/@rjsf/utils/-/utils-5.24.1.tgz",
"integrity": "sha512-A25fFj/TNz5bKikCIs20DiedKAalLuAQ7vUX9VQkD2hps5C9YVr0dJgSlsPa5kzl6lQMaRsNouTx8E1ZdLV2fg==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"json-schema-merge-allof": "^0.8.1",
"jsonpointer": "^5.0.1",
@@ -6198,7 +6187,6 @@
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz",
"integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==",
- "peer": true,
"dependencies": {
"@babel/core": "^7.21.3",
"@svgr/babel-preset": "8.1.0",
@@ -6298,7 +6286,6 @@
"dev": true,
"hasInstallScript": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@swc/counter": "^0.1.2",
"@swc/types": "^0.1.5"
@@ -7275,8 +7262,7 @@
},
"node_modules/@types/json-schema": {
"version": "7.0.15",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@types/keyv": {
"version": "3.1.4",
@@ -7308,7 +7294,6 @@
"node_modules/@types/node": {
"version": "22.8.4",
"license": "MIT",
- "peer": true,
"dependencies": {
"undici-types": "~6.19.8"
}
@@ -7351,7 +7336,6 @@
"node_modules/@types/react": {
"version": "18.3.12",
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/prop-types": "*",
"csstype": "^3.0.2"
@@ -7674,7 +7658,6 @@
"version": "8.15.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
- "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -7755,7 +7738,6 @@
"node_modules/ajv": {
"version": "8.17.1",
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -7797,7 +7779,6 @@
"version": "5.44.0",
"resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.44.0.tgz",
"integrity": "sha512-f8IpsbdQjzTjr/4mJ/jv5UplrtyMnnciGax6/B0OnLCs2/GJTK13O4Y7Ff1AvJVAaztanH+m5nzPoUq6EAy+aA==",
- "peer": true,
"dependencies": {
"@algolia/abtesting": "1.10.0",
"@algolia/client-abtesting": "5.44.0",
@@ -8090,7 +8071,6 @@
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz",
"integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==",
- "peer": true,
"dependencies": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.4",
@@ -8587,7 +8567,6 @@
"url": "https://github.com/sponsors/ai"
}
],
- "peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.8.25",
"caniuse-lite": "^1.0.30001754",
@@ -8949,7 +8928,6 @@
"version": "11.0.3",
"resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz",
"integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==",
- "peer": true,
"dependencies": {
"@chevrotain/cst-dts-gen": "11.0.3",
"@chevrotain/gast": "11.0.3",
@@ -9591,7 +9569,6 @@
"version": "3.38.1",
"hasInstallScript": true,
"license": "MIT",
- "peer": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/core-js"
@@ -9881,7 +9858,6 @@
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
"integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
- "peer": true,
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -10192,7 +10168,6 @@
"node_modules/cytoscape": {
"version": "3.31.0",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10"
}
@@ -10558,7 +10533,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
"integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
- "peer": true,
"engines": {
"node": ">=12"
}
@@ -12095,7 +12069,6 @@
"node_modules/file-loader/node_modules/ajv": {
"version": "6.12.6",
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -14757,7 +14730,6 @@
"node_modules/jsep": {
"version": "1.4.0",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">= 10.16.0"
}
@@ -17919,7 +17891,6 @@
"resolved": "https://registry.npmjs.org/mobx/-/mobx-6.13.7.tgz",
"integrity": "sha512-aChaVU/DO5aRPmk1GX8L+whocagUUpBQqoPtJk+cm7UOXUk87J4PeWCh6nNmTTIfEhiR9DI/+FnA8dln/hTK7g==",
"license": "MIT",
- "peer": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mobx"
@@ -18400,7 +18371,6 @@
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -19381,7 +19351,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"nanoid": "^3.3.7",
"picocolors": "^1.1.1",
@@ -20237,7 +20206,6 @@
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
"integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
- "peer": true,
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -20806,7 +20774,6 @@
"version": "3.2.5",
"dev": true,
"license": "MIT",
- "peer": true,
"bin": {
"prettier": "bin/prettier.cjs"
},
@@ -21196,7 +21163,6 @@
"version": "6.12.6",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -21263,7 +21229,6 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.0.1.tgz",
"integrity": "sha512-nVRaZCuEyvu69sWrkdwjP6QY57C+lY+uMNNMyWUFJb9Z/JlaBOQus7mSMfGYsblv7R691u6SSJA/dX9IRnyyLQ==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -21273,7 +21238,6 @@
"resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-1.6.8.tgz",
"integrity": "sha512-yD6uN78XlFOkETQp6GRuVe0s5509x3XYx8PfPbirwFTYCj5/RfmSs9YZGCwkUrhZNFzj7tZPdpb+3k50mK1E4g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/runtime": "^7.14.0",
"@restart/context": "^2.1.4",
@@ -21303,7 +21267,6 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.1.tgz",
"integrity": "sha512-3TJg51HSbJiLVYCS6vWwWsyqoS36aGEOCmtLLHxROlSZZ5Bk10xpxHFbrCu4DdqgR85DDc9Vucxqhai3g2xjtA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"scheduler": "^0.25.0"
},
@@ -21356,7 +21319,6 @@
"name": "@docusaurus/react-loadable",
"version": "6.0.0",
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/react": "*"
},
@@ -21401,7 +21363,6 @@
"node_modules/react-router": {
"version": "5.3.4",
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/runtime": "^7.12.13",
"history": "^4.9.0",
@@ -23852,7 +23813,6 @@
"resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.18.tgz",
"integrity": "sha512-Mvf3gJFzZCkhjY2Y/Fx9z1m3dxbza0uI9H1CbNZm/jSHCojzJhQ0R7bByrlFJINnMzz/gPulpoFFGymNwrsMcw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@emotion/is-prop-valid": "1.2.2",
"@emotion/unitless": "0.8.1",
@@ -24137,7 +24097,6 @@
"node_modules/terser-webpack-plugin/node_modules/ajv": {
"version": "6.12.6",
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -24566,7 +24525,6 @@
"version": "10.9.1",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",
@@ -24612,8 +24570,7 @@
},
"node_modules/tslib": {
"version": "2.8.0",
- "license": "0BSD",
- "peer": true
+ "license": "0BSD"
},
"node_modules/tty-browserify": {
"version": "0.0.1",
@@ -25094,7 +25051,6 @@
"node_modules/url-loader/node_modules/ajv": {
"version": "6.12.6",
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -25427,7 +25383,6 @@
"node_modules/webpack": {
"version": "5.95.0",
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/estree": "^1.0.5",
"@webassemblyjs/ast": "^1.12.1",
@@ -25708,7 +25663,6 @@
"node_modules/webpack/node_modules/ajv": {
"version": "6.12.6",
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -26232,7 +26186,6 @@
"version": "4.1.12",
"resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz",
"integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==",
- "peer": true,
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
diff --git a/package.json b/package.json
index 9a8756515a..291bd6dee9 100644
--- a/package.json
+++ b/package.json
@@ -36,6 +36,7 @@
"@docusaurus/plugin-content-docs": "3.9.2",
"@docusaurus/plugin-content-pages": "3.9.2",
"@docusaurus/plugin-sitemap": "3.9.2",
+ "@docusaurus/plugin-svgr": "^3.9.2",
"@docusaurus/preset-classic": "3.9.2",
"@docusaurus/theme-classic": "3.9.2",
"@docusaurus/theme-search-algolia": "3.9.2",
diff --git a/src/plugins/docusaurus-polyfill/index.js b/src/plugins/docusaurus-polyfill/index.js
index 2d11bd28f8..c09422da46 100644
--- a/src/plugins/docusaurus-polyfill/index.js
+++ b/src/plugins/docusaurus-polyfill/index.js
@@ -1,18 +1,29 @@
-const webpack = require("webpack")
const NodePolyfillPlugin = require("node-polyfill-webpack-plugin")
-// eslint-disable-next-line
module.exports = function (context, options) {
return {
name: "docusaurus-polyfill",
- // eslint-disable-next-line
configureWebpack(config, isServer, utils) {
- const plugins = [
- new NodePolyfillPlugin(),
- ]
-
return {
- plugins,
+ mergeStrategy: { "module.rules": "prepend" },
+ plugins: [
+ new NodePolyfillPlugin(),
+ ],
+ resolve: {
+ fallback: {
+ buffer: require.resolve("buffer/"),
+ },
+ },
+ module: {
+ rules: [
+ {
+ test: /\.m?js$/,
+ resolve: {
+ fullySpecified: false,
+ },
+ },
+ ],
+ },
}
},
}
From b5a52039dad9bd46a1d4b8a8f3723c56cd1e8020 Mon Sep 17 00:00:00 2001
From: unatasha8
Date: Tue, 17 Mar 2026 11:22:48 -0700
Subject: [PATCH 14/37] docs: updated with feedback
---
docs/guides/rate-limits-legacy.mdx | 73 +++++++++++++++++++---
docs/guides/rate-limits-new.mdx | 94 ++++++++++++++++++++++++----
docs/guides/rate-limits-project.mdx | 96 ++++-------------------------
3 files changed, 161 insertions(+), 102 deletions(-)
diff --git a/docs/guides/rate-limits-legacy.mdx b/docs/guides/rate-limits-legacy.mdx
index bfd9631ad6..995b888a9d 100644
--- a/docs/guides/rate-limits-legacy.mdx
+++ b/docs/guides/rate-limits-legacy.mdx
@@ -21,9 +21,9 @@ usage for all our customers.
Ory implements two main rate limit types:
-1. Project rate limits: Based on your subscription plan and environment (Production, Staging, or Development). These control the
+- Project rate limits: Based on your subscription plan and environment (Production, Staging, or Development). These control the
overall request volume your projects can make to Ory's APIs.
-2. Endpoint-based rate limits: Additional security controls that protect specific endpoints against attacks like brute-force,
+- 2Endpoint-based rate limits: Additional security controls that protect specific endpoints against attacks like brute-force,
credential stuffing, and concurrent request abuse, regardless of your project limits.
## Project rate limits in workspaces
@@ -36,9 +36,9 @@ Network across different usage scenarios.
Rate limits for each project are determined by two main factors:
-1. Workspace subscription: Your subscription plan (Developer, Production, Growth, or Enterprise) sets the baseline for your rate
+- Workspace subscription: Your subscription plan (Developer, Production, Growth, or Enterprise) sets the baseline for your rate
limits.
-2. Project environment: Within each workspace, projects can be assigned to Production, Staging, or Development environments, each
+- Project environment: Within each workspace, projects can be assigned to Production, Staging, or Development environments, each
with specific rate limit configurations.
For a detailed explanation of workspaces and environments, see our [Workspaces and environments guide](/docs/guides/workspaces).
@@ -47,8 +47,68 @@ For a detailed explanation of workspaces and environments, see our [Workspaces a
Each rate limit policy includes two limits:
-1. Burst limit: Maximum requests per second (rps), allowing for short traffic spikes.
-2. Sustained limit: Maximum requests per minute (rpm), ensuring consistent performance over time.
+- Burst limit: Maximum requests per second (rps), allowing for short traffic spikes.
+- Sustained limit: Maximum requests per minute (rpm), ensuring consistent performance over time.
+
+## Monitor rate limit headers
+
+Ory Network includes rate limit information in API response headers for project rate-limits. Use these headers to avoid exceeding
+the applicable rate limit. Your client must handle these responses to maintain service quality.
+
+| Header | Description |
+| ----------------------- | --------------------------------------------------------------------------------------- |
+| `x-ratelimit-limit` | The rate limit ceiling(s) for the current request, including burst and sustained limits |
+| `x-ratelimit-remaining` | Number of requests remaining in the current window |
+| `x-ratelimit-reset` | Number of seconds until the rate limit window resets |
+
+Example header values:
+
+```shell
+x-ratelimit-limit: 10, 10;w=1, 300;w=60
+x-ratelimit-remaining: 8
+x-ratelimit-reset: 1
+```
+
+The `x-ratelimit-limit` header follows the
+[IETF RateLimit header fields draft](https://datatracker.ietf.org/doc/draft-ietf-httpapi-ratelimit-headers/), where `w=1`
+indicates a 1-second window and `w=60` indicates a 60-second window. Use these headers to throttle requests proactively and reduce
+the likelihood of hitting 429 errors.
+
+## How to handle 429 responses
+
+When your client receives a `429 Too Many Requests` response, you've exceeded the applicable rate limit. Your client must handle
+these responses to maintain service quality.
+
+Your implementation must:
+
+- **Detect 429 responses**: Monitor for HTTP 429 status codes on all API calls.
+- **Implement exponential backoff**: When receiving a 429, pause and retry with increasing delays (for example: 1s, 2s, 4s, 8s).
+- **Respect rate limit headers**: Check `x-ratelimit-remaining` and `x-ratelimit-reset`, when available, to throttle requests
+ proactively.
+- **Avoid retry storms**: Don't retry failed requests in a tight loop.
+
+### Exponential backoff strategy
+
+Implement an exponential backoff strategy to proactively avoid hitting rate limits.
+
+```jsx
+async function callApiWithBackoff(request, maxRetries = 5) {
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
+ const response = await fetch(request)
+ if (response.status === 429) {
+ const delay = Math.pow(2, attempt) * 1000 // 1s, 2s, 4s, 8s, 16s
+ await new Promise((resolve) => setTimeout(resolve, delay))
+ continue
+ }
+ return response
+ }
+ throw new Error("Max retries exceeded")
+}
+```
+
+Clients that repeatedly exceed rate limits without proper backoff may have their API access temporarily blocked. For high-volume
+use cases that exceed your plan's limits, open a support ticket via the [Ory Console](https://console.ory.sh/support) or email
+[support@ory.sh](mailto:support@ory.sh).
### Determine your project's rate limits
@@ -231,7 +291,6 @@ The following endpoints are protected by different types of rate limiting:
| Type | Endpoint | HTTP Methods | Ratelimit Key | Action |
| :--------- | :------------------------------------------ | :----------------------- | :----------------------------------------------- | :------------------------------------- |
-| Volumetric | | | | To be added later |
| Inflight | `/admin/identities` | `POST`, `PATCH` | `{project_id} + {full_path}` | Blocks concurrent requests (enforced) |
| Inflight | `/admin/identities/{id}` | `PUT`, `PATCH`, `DELETE` | `{project_id} + {full_path}` | Blocks concurrent requests (enforced) |
| Inflight | `/admin/identities/{id}/credentials/{type}` | `DELETE` | `{project_id} + {full_path}` | Blocks concurrent requests (enforced) |
diff --git a/docs/guides/rate-limits-new.mdx b/docs/guides/rate-limits-new.mdx
index 3981771a02..64657a3d25 100644
--- a/docs/guides/rate-limits-new.mdx
+++ b/docs/guides/rate-limits-new.mdx
@@ -25,23 +25,95 @@ Ory uses two types of rate limits:
- [Endpoint-based rate limits](./rate-limits-endpoint): Control traffic to individual endpoints to protect against volumetric
attacks, brute-force attempts, and concurrent request abuse—regardless of your project rate limits.
-## Identify the rate limits that apply to your project
+Each project has a set of rate limit buckets. A bucket is a named group of API endpoints that share the same rate limit
+thresholds. When a request comes in, Ory resolves which bucket the endpoint belongs to and applies the threshold for that bucket.
-In the **Project rate limit table** below:
+Bucket thresholds are determined by two factors:
-1. Select your subscription tier from the **Tier** dropdown. Options are Developer, Production, Growth, or Enterprise.
-2. Select your project environment from the **Environment** dropdown. Options are Production, Staging, or Development.
-3. To search by API path, enter the API path into the **Search API path** box. The endpoint appears highlighted. Look to see which
- bucket it belongs to for its rate limit.
+- **Subscription tier**: The project's subscription tier (Developer, Production, Growth, or Enterprise).
+- **Project environment**: The project's environment (Production, Staging, or Development).
+
+For a detailed explanation of tiers and environments, see our [Workspaces and environments guide](/docs/guides/workspaces).
+
+## Rate limits per bucket
+
+Buckets follow a `{service}-{access}-{threshold}` naming pattern. For example:
+
+- `kratos-public-high`: for endpoints with a high rate limit allowance
+- `hydra-public-medium`: for endpoints with a moderate rate limit allowance
+- `hydra-admin-low`: for endpoints with a low rate limit allowance
:::info
-Project rate limits use a bucket system to group endpoints and apply thresholds. Understanding how buckets work will help you
-understand the project rate limit table below. See [Project rate limits](./rate-limits-project) to learn how rate limits are
-applied per bucket.
+A bucket counter is shared across all endpoints in the same bucket. For example, `POST /admin/relation-tuples` and
+`DELETE /admin/relation-tuples` both belong to `keto-admin-high`, so every call to either endpoint counts against the same limit.
+Plan your request volumes accordingly.
:::
-### Project rate limit table
+### Rate limit dimensions
+
+You will see two rate limits for each bucket:
+
+- **Burst limit**: Maximum requests per second (rps), allowing for short traffic spikes.
+- **Sustained limit**: Maximum requests per minute (rpm), ensuring consistent performance over time.
+
+## Monitor rate limit headers
+
+Ory Network includes rate limit information in API response headers for project rate-limits. Use these headers to avoid exceeding
+the applicable rate limit. Your client must handle these responses to maintain service quality.
+
+| Header | Description |
+| ----------------------- | --------------------------------------------------------------------------------------- |
+| `x-ratelimit-limit` | The rate limit ceiling(s) for the current request, including burst and sustained limits |
+| `x-ratelimit-remaining` | Number of requests remaining in the current window |
+| `x-ratelimit-reset` | Number of seconds until the rate limit window resets |
+
+Example header values:
+
+```shell
+x-ratelimit-limit: 10, 10;w=1, 300;w=60
+x-ratelimit-remaining: 8
+x-ratelimit-reset: 1
+```
+
+The `x-ratelimit-limit` header follows the
+[IETF RateLimit header fields draft](https://datatracker.ietf.org/doc/draft-ietf-httpapi-ratelimit-headers/), where `w=1`
+indicates a 1-second window and `w=60` indicates a 60-second window. Use these headers to throttle requests proactively and reduce
+the likelihood of hitting 429 errors.
+
+## How to handle 429 responses
+
+When your client receives a `429 Too Many Requests` response, you've exceeded the applicable rate limit. Your client must handle
+these responses to maintain service quality.
+
+Your implementation must:
+
+- **Detect 429 responses**: Monitor for HTTP 429 status codes on all API calls.
+- **Implement exponential backoff**: When receiving a 429, pause and retry with increasing delays (for example: 1s, 2s, 4s, 8s).
+- **Respect rate limit headers**: Check `x-ratelimit-remaining` and `x-ratelimit-reset`, when available, to throttle requests
+ proactively.
+- **Avoid retry storms**: Don't retry failed requests in a tight loop.
+
+### Exponential backoff strategy
+
+Implement an exponential backoff strategy to proactively avoid hitting rate limits.
+
+```jsx
+async function callApiWithBackoff(request, maxRetries = 5) {
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
+ const response = await fetch(request)
+ if (response.status === 429) {
+ const delay = Math.pow(2, attempt) * 1000 // 1s, 2s, 4s, 8s, 16s
+ await new Promise((resolve) => setTimeout(resolve, delay))
+ continue
+ }
+ return response
+ }
+ throw new Error("Max retries exceeded")
+}
+```
-
+Clients that repeatedly exceed rate limits without proper backoff may have their API access temporarily blocked. For high-volume
+use cases that exceed your plan's limits, open a support ticket via the [Ory Console](https://console.ory.sh/support) or email
+[support@ory.sh](mailto:support@ory.sh).
diff --git a/docs/guides/rate-limits-project.mdx b/docs/guides/rate-limits-project.mdx
index c79317f476..0860d64238 100644
--- a/docs/guides/rate-limits-project.mdx
+++ b/docs/guides/rate-limits-project.mdx
@@ -1,98 +1,26 @@
---
id: rate-limits-project
-title: Project rate limits for Ory Network
+title: Project rate limits
sidebar_label: Project rate limits
---
-Each project has a set of rate limit buckets. A bucket is a named group of API endpoints that share the same rate limit
-thresholds. When a request comes in, Ory resolves which bucket the endpoint belongs to and applies the threshold for that bucket.
+## Identify the rate limits that apply to your project
-Bucket thresholds are determined by two factors:
+In the **Project rate limit table** below:
-- **Subscription tier**: The project's subscription tier (Developer, Production, Growth, or Enterprise).
-- **Project environment**: The project's environment (Production, Staging, or Development).
-
-For a detailed explanation of tiers and environments, see our [Workspaces and environments guide](/docs/guides/workspaces).
-
-## Rate limits per bucket
-
-Buckets follow a `{service}-{access}-{threshold}` naming pattern. For example:
-
-- `kratos-public-high`: for endpoints with a high rate limit allowance
-- `hydra-public-medium`: for endpoints with a moderate rate limit allowance
-- `hydra-admin-low`: for endpoints with a low rate limit allowance
+1. Select your subscription tier from the **Tier** dropdown. Options are Developer, Production, Growth, or Enterprise.
+2. Select your project environment from the **Environment** dropdown. Options are Production, Staging, or Development.
+3. To search by API path, enter the API path into the **Search API path** box. The endpoint appears highlighted. Look to see which
+ bucket it belongs to for its rate limit.
:::info
-A bucket counter is shared across all endpoints in the same bucket. For example, `POST /admin/relation-tuples` and
-`DELETE /admin/relation-tuples` both belong to `keto-admin-high`, so every call to either endpoint counts against the same limit.
-Plan your request volumes accordingly.
+Project rate limits use a bucket system to group endpoints and apply thresholds. Understanding how buckets work will help you
+understand the project rate limit table below. See [Project rate limits](./rate-limits-project) to learn how rate limits are
+applied per bucket.
:::
-### Rate limit dimensions
-
-You will see two rate limits for each bucket:
-
-- **Burst limit**: Maximum requests per second (rps), allowing for short traffic spikes.
-- **Sustained limit**: Maximum requests per minute (rpm), ensuring consistent performance over time.
-
-## Monitor rate limit headers
-
-Ory Network includes rate limit information in API response headers for project rate-limits. Use these headers to avoid exceeding
-the applicable rate limit. Your client must handle these responses to maintain service quality.
-
-| Header | Description |
-| ----------------------- | --------------------------------------------------------------------------------------- |
-| `x-ratelimit-limit` | The rate limit ceiling(s) for the current request, including burst and sustained limits |
-| `x-ratelimit-remaining` | Number of requests remaining in the current window |
-| `x-ratelimit-reset` | Number of seconds until the rate limit window resets |
-
-Example header values:
-
-```shell
-x-ratelimit-limit: 10, 10;w=1, 300;w=60
-x-ratelimit-remaining: 8
-x-ratelimit-reset: 1
-```
-
-The `x-ratelimit-limit` header follows the
-[IETF RateLimit header fields draft](https://datatracker.ietf.org/doc/draft-ietf-httpapi-ratelimit-headers/), where `w=1`
-indicates a 1-second window and `w=60` indicates a 60-second window. Use these headers to throttle requests proactively and reduce
-the likelihood of hitting 429 errors.
-
-## How to handle 429 responses
-
-When your client receives a `429 Too Many Requests` response, you've exceeded the applicable rate limit. Your client must handle
-these responses to maintain service quality.
-
-Your implementation must:
-
-- **Detect 429 responses**: Monitor for HTTP 429 status codes on all API calls.
-- **Implement exponential backoff**: When receiving a 429, pause and retry with increasing delays (for example: 1s, 2s, 4s, 8s).
-- **Respect rate limit headers**: Check `x-ratelimit-remaining` and `x-ratelimit-reset`, when available, to throttle requests
- proactively.
-- **Avoid retry storms**: Don't retry failed requests in a tight loop.
-
-### Exponential backoff strategy
-
-Implement an exponential backoff strategy to proactively avoid hitting rate limits.
-
-```jsx
-async function callApiWithBackoff(request, maxRetries = 5) {
- for (let attempt = 0; attempt < maxRetries; attempt++) {
- const response = await fetch(request)
- if (response.status === 429) {
- const delay = Math.pow(2, attempt) * 1000 // 1s, 2s, 4s, 8s, 16s
- await new Promise((resolve) => setTimeout(resolve, delay))
- continue
- }
- return response
- }
- throw new Error("Max retries exceeded")
-}
-```
+### Project rate limit table
-Clients that repeatedly exceed rate limits without proper backoff may have their API access temporarily blocked. For high-volume
-use cases that exceed your plan's limits, open a support ticket via the [Ory Console](https://console.ory.sh/support) or email
-[support@ory.sh](mailto:support@ory.sh).
+
From 32a7d82e5a8483e323ac77e2c82c3d40c423392a Mon Sep 17 00:00:00 2001
From: unatasha8
Date: Tue, 17 Mar 2026 11:28:33 -0700
Subject: [PATCH 15/37] docs: make format fixes
---
docs/guides/rate-limits-legacy.mdx | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/docs/guides/rate-limits-legacy.mdx b/docs/guides/rate-limits-legacy.mdx
index 995b888a9d..70c8d97409 100644
--- a/docs/guides/rate-limits-legacy.mdx
+++ b/docs/guides/rate-limits-legacy.mdx
@@ -22,9 +22,9 @@ usage for all our customers.
Ory implements two main rate limit types:
- Project rate limits: Based on your subscription plan and environment (Production, Staging, or Development). These control the
- overall request volume your projects can make to Ory's APIs.
+ overall request volume your projects can make to Ory's APIs.
- 2Endpoint-based rate limits: Additional security controls that protect specific endpoints against attacks like brute-force,
- credential stuffing, and concurrent request abuse, regardless of your project limits.
+ credential stuffing, and concurrent request abuse, regardless of your project limits.
## Project rate limits in workspaces
@@ -37,9 +37,9 @@ Network across different usage scenarios.
Rate limits for each project are determined by two main factors:
- Workspace subscription: Your subscription plan (Developer, Production, Growth, or Enterprise) sets the baseline for your rate
- limits.
+ limits.
- Project environment: Within each workspace, projects can be assigned to Production, Staging, or Development environments, each
- with specific rate limit configurations.
+ with specific rate limit configurations.
For a detailed explanation of workspaces and environments, see our [Workspaces and environments guide](/docs/guides/workspaces).
@@ -289,15 +289,15 @@ issues.
The following endpoints are protected by different types of rate limiting:
-| Type | Endpoint | HTTP Methods | Ratelimit Key | Action |
-| :--------- | :------------------------------------------ | :----------------------- | :----------------------------------------------- | :------------------------------------- |
-| Inflight | `/admin/identities` | `POST`, `PATCH` | `{project_id} + {full_path}` | Blocks concurrent requests (enforced) |
-| Inflight | `/admin/identities/{id}` | `PUT`, `PATCH`, `DELETE` | `{project_id} + {full_path}` | Blocks concurrent requests (enforced) |
-| Inflight | `/admin/identities/{id}/credentials/{type}` | `DELETE` | `{project_id} + {full_path}` | Blocks concurrent requests (enforced) |
-| Inflight | `/admin/identities/{id}/sessions` | `DELETE` | `{project_id} + {full_path}` | Blocks concurrent requests (enforced) |
-| Inflight | `/admin/sessions/{id}` | `DELETE` | `{project_id} + {full_path}` | Logs concurrent requests (report-only) |
-| Inflight | `/admin/sessions/{id}/extend` | `PATCH` | `{project_id} + {full_path}` | Logs concurrent requests (report-only) |
-| Inflight | `/self-service/recovery` | `POST` | `{project_id} + {path} + "/" + {email\|flow_id}` | Logs concurrent requests (report-only) |
+| Type | Endpoint | HTTP Methods | Ratelimit Key | Action |
+| :------- | :------------------------------------------ | :----------------------- | :----------------------------------------------- | :------------------------------------- |
+| Inflight | `/admin/identities` | `POST`, `PATCH` | `{project_id} + {full_path}` | Blocks concurrent requests (enforced) |
+| Inflight | `/admin/identities/{id}` | `PUT`, `PATCH`, `DELETE` | `{project_id} + {full_path}` | Blocks concurrent requests (enforced) |
+| Inflight | `/admin/identities/{id}/credentials/{type}` | `DELETE` | `{project_id} + {full_path}` | Blocks concurrent requests (enforced) |
+| Inflight | `/admin/identities/{id}/sessions` | `DELETE` | `{project_id} + {full_path}` | Blocks concurrent requests (enforced) |
+| Inflight | `/admin/sessions/{id}` | `DELETE` | `{project_id} + {full_path}` | Logs concurrent requests (report-only) |
+| Inflight | `/admin/sessions/{id}/extend` | `PATCH` | `{project_id} + {full_path}` | Logs concurrent requests (report-only) |
+| Inflight | `/self-service/recovery` | `POST` | `{project_id} + {path} + "/" + {email\|flow_id}` | Logs concurrent requests (report-only) |
:::note
From 4eba3876fa48aca225c6501082958024a55b363a Mon Sep 17 00:00:00 2001
From: unatasha8
Date: Sun, 22 Mar 2026 20:12:29 -0700
Subject: [PATCH 16/37] docs: Moved project rate limit content from high-level
'new' to 'project' file
---
docs/guides/rate-limit-endpoint.mdx | 20 +++++-----
docs/guides/rate-limits-legacy.mdx | 44 +++++++++++-----------
docs/guides/rate-limits-new.mdx | 58 +++++++----------------------
docs/guides/rate-limits-project.mdx | 31 +++++++++++++++
docs/guides/rate-limits.mdx | 29 ++++++++-------
src/sidebar.ts | 2 +-
6 files changed, 92 insertions(+), 92 deletions(-)
diff --git a/docs/guides/rate-limit-endpoint.mdx b/docs/guides/rate-limit-endpoint.mdx
index 14f9b5575b..4954a77469 100644
--- a/docs/guides/rate-limit-endpoint.mdx
+++ b/docs/guides/rate-limit-endpoint.mdx
@@ -10,25 +10,25 @@ fingerprints.
Benefits:
-- Enhanced security: Restricts requests from specific sources, making attacks significantly harder to succeed
-- Bot protection: Differentiates genuine users from harmful automated activity
-- Granular control: Fine-tunes security for individual endpoints without compromising user experience
+- Enhanced security—Restricts requests from specific sources, making attacks significantly harder to succeed
+- Bot protection—Differentiates genuine users from harmful automated activity
+- Granular control—Fine-tunes security for individual endpoints without compromising user experience
## Types of endpoint-based protection
-Ory implements two layers of endpoint-based protection:
+Ory implements two types of endpoint-based protection:
-- Volumetric: Limits the total amount of traffic over time.
-- Inflight: Limits the number of concurrent active requests.
+- **Volumetric**: Limits the total amount of traffic over time.
+- **Inflight**: Limits the number of concurrent active requests.
### Volumetric rate limits
Volumetric rate limits analyze incoming request patterns based on:
-- Source identification: IP addresses and JA3/JA4 fingerprints
-- Request frequency: Detects volumetric attacks and system overwhelm attempts
-- Authentication status: Different limits for authenticated vs. unauthenticated requests
-- HTTP method: Varying limits based on GET, POST, etc.
+- Source identification—IP addresses and JA3/JA4 fingerprints
+- Request frequency—Detects volumetric attacks and system overwhelm attempts
+- Authentication status—Different limits for authenticated vs. unauthenticated requests
+- HTTP method—Varying limits based on GET, POST, etc.
### Inflight rate limits
diff --git a/docs/guides/rate-limits-legacy.mdx b/docs/guides/rate-limits-legacy.mdx
index 70c8d97409..a73e7476a5 100644
--- a/docs/guides/rate-limits-legacy.mdx
+++ b/docs/guides/rate-limits-legacy.mdx
@@ -1,15 +1,15 @@
---
id: rate-limits-legacy
-title: Legacy Ory Network rate limits
-sidebar_label: Legacy rate limits
+title: Ory Network rate limits - legacy
+sidebar_label: Rate limits - legacy
---
:::info
-This page describes the legacy rate limit policy, which applies to existing Ory Network customers who haven't been migrated to the
-new rate limit policy yet. If you're a new customer or have already been migrated, see the
-[new rate limits](/docs/guides/rate-limits-new). See [Rate limits](/docs/guides/rate-limits) to learn about both policies and the
-migration plan.
+This page describes the legacy project rate limit policy, which applies to existing Ory Network customers who haven't been
+migrated to the new rate limit policy yet. If you're a new customer or have already been migrated, see the
+[rate limits - new](/docs/guides/rate-limits-new). See [Rate limits](/docs/guides/rate-limits) to learn about both policies and
+the migration plan. Endpoint rate limits have not changed.
:::
@@ -21,9 +21,9 @@ usage for all our customers.
Ory implements two main rate limit types:
-- Project rate limits: Based on your subscription plan and environment (Production, Staging, or Development). These control the
- overall request volume your projects can make to Ory's APIs.
-- 2Endpoint-based rate limits: Additional security controls that protect specific endpoints against attacks like brute-force,
+- **Project rate limits**: Based on your subscription plan and environment (Production, Staging, or Development). These control
+ the overall request volume your projects can make to Ory's APIs.
+- **Endpoint-based rate limits**: Additional security controls that protect specific endpoints against attacks like brute-force,
credential stuffing, and concurrent request abuse, regardless of your project limits.
## Project rate limits in workspaces
@@ -36,9 +36,9 @@ Network across different usage scenarios.
Rate limits for each project are determined by two main factors:
-- Workspace subscription: Your subscription plan (Developer, Production, Growth, or Enterprise) sets the baseline for your rate
+- Workspace subscription—Your subscription plan (Developer, Production, Growth, or Enterprise) sets the baseline for your rate
limits.
-- Project environment: Within each workspace, projects can be assigned to Production, Staging, or Development environments, each
+- Project environment—Within each workspace, projects can be assigned to Production, Staging, or Development environments, each
with specific rate limit configurations.
For a detailed explanation of workspaces and environments, see our [Workspaces and environments guide](/docs/guides/workspaces).
@@ -47,13 +47,13 @@ For a detailed explanation of workspaces and environments, see our [Workspaces a
Each rate limit policy includes two limits:
-- Burst limit: Maximum requests per second (rps), allowing for short traffic spikes.
-- Sustained limit: Maximum requests per minute (rpm), ensuring consistent performance over time.
+- Burst limit—Maximum requests per second (rps), allowing for short traffic spikes.
+- Sustained limit—Maximum requests per minute (rpm), ensuring consistent performance over time.
## Monitor rate limit headers
-Ory Network includes rate limit information in API response headers for project rate-limits. Use these headers to avoid exceeding
-the applicable rate limit. Your client must handle these responses to maintain service quality.
+Ory Network includes rate limit information in API response headers. Use these headers to avoid exceeding the applicable rate
+limit. Your client must handle these responses to maintain service quality.
| Header | Description |
| ----------------------- | --------------------------------------------------------------------------------------- |
@@ -256,9 +256,9 @@ addresses or JA4 fingerprints.
Benefits:
-- Enhanced security: Restricts requests from specific sources, making attacks significantly harder to succeed
-- Bot protection: Differentiates genuine users from harmful automated activity
-- Granular control: Fine-tunes security for individual endpoints without compromising user experience
+- Enhanced security—Restricts requests from specific sources, making attacks significantly harder to succeed
+- Bot protection—Differentiates genuine users from harmful automated activity
+- Granular control—Fine-tunes security for individual endpoints without compromising user experience
### Types of endpoint-based protection
@@ -268,10 +268,10 @@ Ory implements two layers of endpoint-based protection:
Analyzes incoming request patterns based on:
-- Source identification: IP addresses and JA3/JA4 fingerprints
-- Request frequency: Detects volumetric attacks and system overwhelm attempts
-- Authentication status: Different limits for authenticated vs. unauthenticated requests
-- HTTP method: Varying limits based on GET, POST, etc.
+- Source identification—IP addresses and JA3/JA4 fingerprints
+- Request frequency—Detects volumetric attacks and system overwhelm attempts
+- Authentication status—Different limits for authenticated vs. unauthenticated requests
+- HTTP method—Varying limits based on GET, POST, etc.
#### Inflight rate limits
diff --git a/docs/guides/rate-limits-new.mdx b/docs/guides/rate-limits-new.mdx
index 64657a3d25..269c730410 100644
--- a/docs/guides/rate-limits-new.mdx
+++ b/docs/guides/rate-limits-new.mdx
@@ -1,15 +1,15 @@
---
id: rate-limits-new
-title: New Ory Network rate limits
-sidebar_label: New rate limits
+title: Ory Network rate limits - new
+sidebar_label: Rate limits - New
---
:::info
-This page describes the new rate limit policy, which applies to all new Ory Network customers and to existing customers after
-they've been migrated. If you're an existing customer and haven't received a migration notice yet, see the
-[legacy rate limits](/docs/guides/rate-limits-legacy). See [Rate limits](/docs/guides/rate-limits) to learn about both policies
-and the migration plan.
+There is a new project rate limit policy, which applies to all new Ory Network customers and to existing customers after they've
+been migrated. If you're an existing customer and haven't received a migration notice yet, see the
+[rate limits - legacy](/docs/guides/rate-limits-legacy). See [Rate limits](/docs/guides/rate-limits) to learn about both policies
+and the migration plan. Enpoint-based rate limits have not changed.
:::
@@ -20,48 +20,16 @@ allocation and network stability.
Ory uses two types of rate limits:
-- [Project rate limits](./rate-limits-project): Control the overall request volume your projects can make to Ory APIs, based on
- your subscription tier and project environment.
-- [Endpoint-based rate limits](./rate-limits-endpoint): Control traffic to individual endpoints to protect against volumetric
- attacks, brute-force attempts, and concurrent request abuse—regardless of your project rate limits.
-
-Each project has a set of rate limit buckets. A bucket is a named group of API endpoints that share the same rate limit
-thresholds. When a request comes in, Ory resolves which bucket the endpoint belongs to and applies the threshold for that bucket.
-
-Bucket thresholds are determined by two factors:
-
-- **Subscription tier**: The project's subscription tier (Developer, Production, Growth, or Enterprise).
-- **Project environment**: The project's environment (Production, Staging, or Development).
-
-For a detailed explanation of tiers and environments, see our [Workspaces and environments guide](/docs/guides/workspaces).
-
-## Rate limits per bucket
-
-Buckets follow a `{service}-{access}-{threshold}` naming pattern. For example:
-
-- `kratos-public-high`: for endpoints with a high rate limit allowance
-- `hydra-public-medium`: for endpoints with a moderate rate limit allowance
-- `hydra-admin-low`: for endpoints with a low rate limit allowance
-
-:::info
-
-A bucket counter is shared across all endpoints in the same bucket. For example, `POST /admin/relation-tuples` and
-`DELETE /admin/relation-tuples` both belong to `keto-admin-high`, so every call to either endpoint counts against the same limit.
-Plan your request volumes accordingly.
-
-:::
-
-### Rate limit dimensions
-
-You will see two rate limits for each bucket:
-
-- **Burst limit**: Maximum requests per second (rps), allowing for short traffic spikes.
-- **Sustained limit**: Maximum requests per minute (rpm), ensuring consistent performance over time.
+- **Project rate limits**: Control the overall request volume your projects can make to Ory APIs, based on your subscription tier
+ and project environment. See [Project rate limits](./rate-limits-project) for more information.
+- **Endpoint-based rate limits**: Control traffic to individual endpoints to protect against volumetric attacks, brute-force
+ attempts, and concurrent request abuse—regardless of your project rate limits. See
+ [Endpoint-based rate limits](./rate-limits-endpoint) for more information.
## Monitor rate limit headers
-Ory Network includes rate limit information in API response headers for project rate-limits. Use these headers to avoid exceeding
-the applicable rate limit. Your client must handle these responses to maintain service quality.
+Ory Network includes rate limit information in API response headers. Use these headers to avoid exceeding the applicable rate
+limit. Your client must handle these responses to maintain service quality.
| Header | Description |
| ----------------------- | --------------------------------------------------------------------------------------- |
diff --git a/docs/guides/rate-limits-project.mdx b/docs/guides/rate-limits-project.mdx
index 0860d64238..a82b6c601b 100644
--- a/docs/guides/rate-limits-project.mdx
+++ b/docs/guides/rate-limits-project.mdx
@@ -4,6 +4,37 @@ title: Project rate limits
sidebar_label: Project rate limits
---
+Each project has a set of rate limit buckets. A bucket is a named group of API endpoints that share the same rate limit threshold.
+When a request comes in, Ory resolves which bucket the endpoint belongs to and applies the threshold for that bucket.
+
+Bucket thresholds are determined by two factors:
+
+- **Subscription tier**: The project's subscription tier (Developer, Production, Growth, or Enterprise).
+- **Project environment**: The project's environment (Production, Staging, or Development).
+
+For a detailed explanation of tiers and environments, see our [Workspaces and environments guide](/docs/guides/workspaces).
+
+## Rate limits per bucket
+
+Buckets follow a `{service}-{access}-{threshold}` naming pattern. For example:
+
+- `kratos-public-high`: for endpoints with a high rate limit allowance
+- `hydra-public-medium`: for endpoints with a moderate rate limit allowance
+- `hydra-admin-low`: for endpoints with a low rate limit allowance
+
+:::info
+
+A bucket counter is shared across all endpoints in the same bucket. For example, `POST /admin/relation-tuples` and
+`DELETE /admin/relation-tuples` both belong to `keto-admin-high`, so every call to either endpoint counts against the same limit.
+Plan your request volumes accordingly.
+
+:::
+
+You will see two rate limits for each bucket:
+
+- **Burst limit**: Maximum requests per second (rps), allowing for short traffic spikes.
+- **Sustained limit**: Maximum requests per minute (rpm), ensuring consistent performance over time.
+
## Identify the rate limits that apply to your project
In the **Project rate limit table** below:
diff --git a/docs/guides/rate-limits.mdx b/docs/guides/rate-limits.mdx
index d014030017..57b785cf6e 100644
--- a/docs/guides/rate-limits.mdx
+++ b/docs/guides/rate-limits.mdx
@@ -5,16 +5,16 @@ sidebar_label: Rate limits
---
Ory Network uses rate limits to protect your applications against abuse and ensure fair resource allocation across all customers.
-Ory is currently migrating to a new rate limiting policy. New workspaces are automatically on the new policy; existing customers
-are being migrated by subscription tier.
+Ory is currently migrating to a new project rate limiting policy. New workspaces are automatically on the new policy; existing
+customers are being migrated by subscription tier.
## Which system applies to you?
-| You are... | Your system |
-| -------------------------------------------------- | ------------------------------------------ |
-| A new customer (workspace created after [DATE]) | [New rate limits](./rate-limits-new) |
-| An existing customer — migration not yet completed | [Legacy rate limits](./rate-limits-legacy) |
-| An existing customer — migration completed | [New rate limits](./rate-limits-new) |
+| You are... | Your system |
+| -------------------------------------------------- | -------------------------------------------- |
+| A new customer (workspace created after [DATE]) | [Rate limits - new](./rate-limits-new) |
+| An existing customer — migration not yet completed | [Rate limits - legacy](./rate-limits-legacy) |
+| An existing customer — migration completed | [Rate limits - new](./rate-limits-new) |
:::tip
@@ -25,15 +25,16 @@ notification email.
## What's changing?
-The legacy rate limit policy applied limits per endpoint-path and limits were fixed per subscription plan and environment. The new
-rate limit policy is a more structured model that distributes project rate limits across different types of API operations. API
-operations are now organized into **buckets** based on service, access level, and rate limit threshold. This allows the Ory
-platform to handle traffic more efficiently while giving you clearer and more consistent behavior when interacting with the APIs.
+The legacy rate limit policy applied project rate limits per endpoint-path and limits were fixed per subscription plan and
+environment. The new project rate limit policy is a more structured model that distributes project rate limits across different
+types of API operations. API operations are now organized into **buckets** based on service, access level, and rate limit
+threshold. This allows the Ory platform to handle traffic more efficiently while giving you clearer and more consistent behavior
+when interacting with the APIs.
## Migration plan
The new rate limits will be introduced gradually to ensure a smooth transition. No action is required on your end. Ory will notify
-you before your workspace is migrated. During the migration, your rate limit behavior remains unchanged until the cutover
+you before your workspace is migrated. During the migration, your project rate limit behavior remains unchanged until the cutover
completes.
Migration schedule:
@@ -48,5 +49,5 @@ The types of rate limits, for project-based and endpoint-based, remain the same
## Learn more about rate limits
-- [New rate limits](./rate-limits-new) — applies to new customers and migrated workspaces
-- [Legacy rate limits](./rate-limits-legacy) — applies to existing customers pending migration
+- [Rate limits - new](./rate-limits-new)—applies to new customers and migrated workspaces
+- [Rate limits - legacy](./rate-limits-legacy)—applies to existing customers pending migration
diff --git a/src/sidebar.ts b/src/sidebar.ts
index 7d740fb7cf..9f6fdc90a0 100644
--- a/src/sidebar.ts
+++ b/src/sidebar.ts
@@ -101,7 +101,7 @@ const api: SidebarItemsConfig = [
{
// ← New rate limits as nested category
type: "category",
- label: "New rate limits",
+ label: "Rate limits - New",
link: {
type: "doc",
id: "guides/rate-limits-new",
From 26317beb9f3472139864b3b41508a37b461ace05 Mon Sep 17 00:00:00 2001
From: Andreas Bucksteeg
Date: Tue, 5 May 2026 19:08:28 +0200
Subject: [PATCH 17/37] chore: vendor rate-limit CSVs without date-stamped
filenames
Replaces src/lib/rate-limits/data/bucket-to-{endpoints,threshold}-20260311.csv
with stable filenames bucket-to-endpoints.csv and bucket-to-threshold.csv,
and updates the two filename constants in csv-provider.ts.
Both files are now generated upstream by tools/ratelimit-csvs in the
ory-corp/cloud monorepo (see feat/gen-bucket-endpoints-csv) from the
backoffice rate-limit matcher, the pricing tier maps, and
tetrate/values.yaml. Future refreshes are a copy of the regenerated
exports/, no manual export step required.
The schema is unchanged; csv-provider.ts validates it on load.
---
src/lib/rate-limits/csv-provider.ts | 4 +-
...s-20260311.csv => bucket-to-endpoints.csv} | 402 ++++++++++--------
.../data/bucket-to-threshold-20260311.csv | 205 ---------
.../rate-limits/data/bucket-to-threshold.csv | 205 +++++++++
4 files changed, 423 insertions(+), 393 deletions(-)
rename src/lib/rate-limits/data/{bucket-to-endpoints-20260311.csv => bucket-to-endpoints.csv} (76%)
delete mode 100644 src/lib/rate-limits/data/bucket-to-threshold-20260311.csv
create mode 100644 src/lib/rate-limits/data/bucket-to-threshold.csv
diff --git a/src/lib/rate-limits/csv-provider.ts b/src/lib/rate-limits/csv-provider.ts
index 065dabfd96..21c6db7722 100644
--- a/src/lib/rate-limits/csv-provider.ts
+++ b/src/lib/rate-limits/csv-provider.ts
@@ -13,8 +13,8 @@ import type {
} from "./types"
import { ENV_FROM_CSV, TIER_FROM_CSV } from "./types"
-const ENDPOINTS_CSV = "bucket-to-endpoints-20260311.csv"
-const THRESHOLDS_CSV = "bucket-to-threshold-20260311.csv"
+const ENDPOINTS_CSV = "bucket-to-endpoints.csv"
+const THRESHOLDS_CSV = "bucket-to-threshold.csv"
/**
* Resolve data directory. When running from Docusaurus plugin, pass siteDir so paths resolve correctly.
diff --git a/src/lib/rate-limits/data/bucket-to-endpoints-20260311.csv b/src/lib/rate-limits/data/bucket-to-endpoints.csv
similarity index 76%
rename from src/lib/rate-limits/data/bucket-to-endpoints-20260311.csv
rename to src/lib/rate-limits/data/bucket-to-endpoints.csv
index ab1d4aeece..556dd5c821 100644
--- a/src/lib/rate-limits/data/bucket-to-endpoints-20260311.csv
+++ b/src/lib/rate-limits/data/bucket-to-endpoints.csv
@@ -1,186 +1,216 @@
-Method,Path,Bucket
-GET,/.well-known/jwks.json,hydra-public-high
-GET,/.well-known/openid-configuration,hydra-public-high
-GET,/.well-known/ory/webauthn.js,hydra-public-high
-GET,/admin/clients,hydra-admin-medium
-POST,/admin/clients,hydra-admin-low
-GET,/admin/clients/{id},hydra-admin-high
-DELETE,/admin/clients/{id},hydra-admin-low
-PATCH,/admin/clients/{id},hydra-admin-low
-PUT,/admin/clients/{id},hydra-admin-low
-HEAD,/.well-known/openid-configuration,hydra-public-high
-PUT,/admin/clients/{id}/lifespans,hydra-admin-low
-GET,/admin/keys/{set},hydra-admin-medium
-DELETE,/admin/keys/{set},hydra-admin-low
-POST,/admin/keys/{set},hydra-admin-low
-PUT,/admin/keys/{set},hydra-admin-low
-GET,/admin/keys/{set}/{kid},hydra-admin-medium
-DELETE,/admin/keys/{set}/{kid},hydra-admin-low
-PUT,/admin/keys/{set}/{kid},hydra-admin-low
-GET,/admin/oauth2/auth/requests/consent,hydra-admin-high
-PUT,/admin/oauth2/auth/requests/consent/accept,hydra-admin-high
-PUT,/admin/oauth2/auth/requests/consent/reject,hydra-admin-high
-PUT,/admin/oauth2/auth/requests/device/accept,hydra-admin-high
-GET,/admin/oauth2/auth/requests/login,hydra-admin-high
-PUT,/admin/oauth2/auth/requests/login/accept,hydra-admin-high
-PUT,/admin/oauth2/auth/requests/login/reject,hydra-admin-high
-GET,/admin/oauth2/auth/requests/logout,hydra-admin-high
-PUT,/admin/oauth2/auth/requests/logout/accept,hydra-admin-high
-PUT,/admin/oauth2/auth/requests/logout/reject,hydra-admin-high
-GET,/admin/oauth2/auth/sessions/consent,hydra-admin-high
-DELETE,/admin/oauth2/auth/sessions/consent,hydra-admin-low
-DELETE,/admin/oauth2/auth/sessions/login,hydra-admin-low
-POST,/admin/oauth2/introspect,hydra-admin-high
-DELETE,/admin/oauth2/tokens,hydra-admin-low
-GET,/admin/trust/grants/jwt-bearer/issuers,hydra-admin-medium
-POST,/admin/trust/grants/jwt-bearer/issuers,hydra-admin-low
-GET,/admin/trust/grants/jwt-bearer/issuers/{id},hydra-admin-medium
-DELETE,/admin/trust/grants/jwt-bearer/issuers/{id},hydra-admin-low
-OPTIONS,/admin/clients,hydra-admin-high
-OPTIONS,/admin/clients/{id},hydra-admin-high
-POST,/credentials,hydra-admin-medium
-GET,/oauth2/auth,hydra-public-medium
-HEAD,/oauth2/auth,hydra-public-high
-POST,/oauth2/device/auth,hydra-public-high
-GET,/oauth2/device/verify,hydra-admin-high
-OPTIONS,/oauth2/auth,hydra-public-high
-POST,/oauth2/register,hydra-public-low
-GET,/oauth2/register/{id},hydra-admin-high
-DELETE,/oauth2/register/{id},hydra-public-low
-PUT,/oauth2/register/{id},hydra-public-low
-POST,/oauth2/revoke,hydra-public-medium
-GET,/oauth2/sessions/logout,hydra-public-medium
-POST,/oauth2/auth,hydra-public-medium
-POST,/oauth2/token,hydra-public-medium
-GET,/oauth2/consent,hydra-public-high
-GET,/oauth2/fallbacks/logout/callback,hydra-public-high
-POST,/oauth2/sessions/logout,hydra-public-medium
-OPTIONS,/oauth2/token,hydra-public-high
-GET,/userinfo,hydra-public-medium
-DELETE,/admin/relation-tuples,keto-admin-low
-PATCH,/admin/relation-tuples,keto-admin-low
-PUT,/admin/relation-tuples,keto-admin-low
-GET,/namespaces,keto-admin-low
-POST,/opl/syntax/check,keto-admin-medium
-POST,/ory.keto.relation_tuples.v1alpha2.CheckService/BatchCheck,keto-public-high
-POST,/ory.keto.relation_tuples.v1alpha2.CheckService/Check,keto-public-high
-POST,/ory.keto.relation_tuples.v1alpha2.WriteService/TransactRelationTuples,keto-admin-low
-GET,/relation-tuples,keto-admin-medium
-POST,/relation-tuples/batch/check,keto-public-high
-GET,/relation-tuples/check,keto-public-high
-POST,/relation-tuples/check,keto-public-high
-GET,/relation-tuples/check/openapi,keto-public-high
-POST,/relation-tuples/check/openapi,keto-public-high
-GET,/relation-tuples/expand,keto-admin-medium
-GET,/admin/courier/messages,kratos-admin-low
-PATCH,/admin/identities,kratos-admin-low
-POST,/admin/identities,kratos-admin-low
-DELETE,/admin/identities/{id},kratos-admin-low
-PATCH,/admin/identities/{id},kratos-admin-low
-PUT,/admin/identities/{id},kratos-admin-low
-DELETE,/admin/identities/{id}/credentials/{type},kratos-admin-low
-DELETE,/admin/identities/{id}/sessions,kratos-admin-low
-POST,/admin/recovery/code,kratos-admin-low
-POST,/admin/recovery/link,kratos-admin-low
-DELETE,/admin/sessions/{id},kratos-admin-low
-PATCH,/admin/sessions/{id}/extend,kratos-admin-low
-POST,/scim/{client}/v2/Groups,kratos-admin-low
-PUT,/scim/{client}/v2/Groups/{id},kratos-admin-low
-PATCH,/scim/{client}/v2/Groups/{id},kratos-admin-low
-DELETE,/scim/{client}/v2/Groups/{id},kratos-admin-low
-POST,/scim/{client}/v2/Users,kratos-admin-low
-PUT,/scim/{client}/v2/Users/{id},kratos-admin-low
-PATCH,/scim/{client}/v2/Users/{id},kratos-admin-low
-DELETE,/scim/{client}/v2/Users/{id},kratos-admin-low
-GET,/admin/identities/{id},kratos-admin-high
-GET,/admin/sessions/{id},kratos-admin-high
-OPTIONS,/admin/identities/{id},kratos-admin-high
-GET,/admin/courier/messages/{id},kratos-admin-medium
-GET,/admin/identities,kratos-admin-medium
-GET,/admin/identities/{id}/sessions,kratos-admin-medium
-GET,/admin/identities/by/external/{externalID},kratos-admin-medium
-GET,/admin/sessions,kratos-admin-medium
-GET,/schemas,kratos-admin-medium
-GET,/schemas/{id},kratos-admin-medium
-GET,/scim/{client}/v2/Groups,kratos-admin-medium
-GET,/scim/{client}/v2/Groups/{id},kratos-admin-medium
-GET,/scim/{client}/v2/Schemas,kratos-admin-medium
-GET,/scim/{client}/v2/Schemas/{id},kratos-admin-medium
-GET,/scim/{client}/v2/ServiceProviderConfig,kratos-admin-medium
-GET,/scim/{client}/v2/Users,kratos-admin-medium
-GET,/scim/{client}/v2/Users/{id},kratos-admin-medium
-GET,/self-service/errors,kratos-public-high
-GET,/self-service/fed-cm/parameters,kratos-public-high
-POST,/self-service/fed-cm/token,kratos-public-low
-POST,/self-service/login,kratos-public-low
-GET,/self-service/login/api,kratos-public-medium
-GET,/self-service/login/browser,kratos-public-medium
-GET,/self-service/login/flows,kratos-public-high
-HEAD,/self-service/fed-cm/parameters,kratos-public-high
-GET,/self-service/logout,kratos-public-high
-OPTIONS,/self-service/fed-cm/token,kratos-public-high
-DELETE,/self-service/logout/api,kratos-public-medium
-GET,/self-service/logout/browser,kratos-public-medium
-GET,/self-service/login,kratos-public-high
-OPTIONS,/self-service/login,kratos-public-high
-GET,/self-service/methods/oidc/callback/{provider_id},kratos-public-medium
-GET,/self-service/methods/oidc/organizations/{organization_id},kratos-public-medium
-GET,/self-service/methods/saml/callback/{provider_id},kratos-public-medium
-GET,/self-service/methods/saml/organizations/{organization_id},kratos-public-medium
-POST,/self-service/recovery,kratos-public-low
-HEAD,/self-service/login/browser,kratos-public-high
-OPTIONS,/self-service/login/browser,kratos-public-high
-POST,/self-service/login/browser,kratos-public-medium
-GET,/self-service/recovery/api,kratos-public-medium
-GET,/self-service/recovery/browser,kratos-public-medium
-OPTIONS,/self-service/login/flows,kratos-public-high
-GET,/self-service/recovery/flows,kratos-public-high
-OPTIONS,/self-service/logout,kratos-public-high
-POST,/self-service/registration,kratos-public-low
-OPTIONS,/self-service/logout/browser,kratos-public-high
-GET,/self-service/methods/oidc/callback,kratos-public-high
-GET,/self-service/registration/api,kratos-public-medium
-GET,/self-service/registration/browser,kratos-public-medium
-GET,/self-service/registration/flows,kratos-public-high
-POST,/self-service/settings,kratos-public-low
-HEAD,/self-service/methods/oidc/callback/{provider_id},kratos-public-high
-GET,/self-service/recovery,kratos-public-high
-GET,/self-service/settings/api,kratos-public-medium
-GET,/self-service/settings/browser,kratos-public-medium
-GET,/self-service/settings/flows,kratos-public-high
-POST,/self-service/verification,kratos-public-low
-HEAD,/self-service/recovery,kratos-public-high
-OPTIONS,/self-service/recovery,kratos-public-high
-HEAD,/self-service/recovery/browser,kratos-public-high
-GET,/self-service/verification/api,kratos-public-medium
-GET,/self-service/verification/browser,kratos-public-medium
-OPTIONS,/self-service/recovery/browser,kratos-public-high
-GET,/self-service/verification/flows,kratos-public-high
-OPTIONS,/self-service/recovery/flows,kratos-public-high
-GET,/sessions,kratos-public-medium
-DELETE,/sessions,kratos-public-low
-DELETE,/sessions/{id},kratos-public-low
-GET,/sessions/token-exchange,kratos-public-medium
-GET,/self-service/registration,kratos-public-high
-OPTIONS,/self-service/registration,kratos-public-high
-HEAD,/self-service/registration/browser,kratos-public-high
-GET,/sessions/whoami,kratos-public-high
-OPTIONS,/self-service/registration/browser,kratos-public-high
-GET,/self-service/settings,kratos-public-high
-OPTIONS,/self-service/settings,kratos-public-high
-GET,/self-service/verification,kratos-public-high
-HEAD,/self-service/verification,kratos-public-high
-OPTIONS,/self-service/verification,kratos-public-high
-HEAD,/self-service/verification/browser,kratos-public-high
-OPTIONS,/self-service/verification/flows,kratos-public-high
-OPTIONS,/sessions,kratos-public-high
-GET,/saml/.well-known/idp-metadata,polis-public-high
-GET,/saml/.well-known/saml.cer,polis-public-high
-GET,/saml/.well-known/sp-metadata,polis-public-high
-GET,/saml/api/error,polis-public-high
-POST,/saml/api/identity-federation/sso,polis-public-medium
-GET,/saml/api/identity-federation/sso,polis-public-medium
-POST,/saml/api/oauth/authorize,polis-public-medium
-GET,/saml/api/oauth/authorize,polis-public-medium
-GET,/saml/api/oauth/oidc,polis-public-medium
-POST,/saml/api/oauth/saml,polis-public-medium
+Method,Path,Bucket
+GET,/.well-known/openid-configuration,hydra-public-high
+HEAD,/.well-known/openid-configuration,hydra-public-high
+GET,/.well-known/jwks.json,hydra-public-high
+GET,/.well-known/ory/webauthn.js,hydra-public-high
+HEAD,/oauth2/auth,hydra-public-high
+OPTIONS,/oauth2/auth,hydra-public-high
+GET,/oauth2/consent,hydra-public-high
+POST,/oauth2/device/auth,hydra-public-high
+GET,/oauth2/fallbacks/logout/callback,hydra-public-high
+OPTIONS,/oauth2/token,hydra-public-high
+GET,/admin/clients,hydra-admin-medium
+GET,/admin/trust/grants/jwt-bearer/issuers,hydra-admin-medium
+POST,/credentials,hydra-admin-medium
+GET,/admin/keys/{set},hydra-admin-medium
+GET,/admin/keys/{set}/{kid},hydra-admin-medium
+GET,/admin/trust/grants/jwt-bearer/issuers/{id},hydra-admin-medium
+POST,/admin/clients,hydra-admin-low
+PUT,/admin/clients/{id}/lifespans,hydra-admin-low
+DELETE,/admin/oauth2/auth/sessions/consent,hydra-admin-low
+DELETE,/admin/oauth2/auth/sessions/login,hydra-admin-low
+DELETE,/admin/oauth2/tokens,hydra-admin-low
+POST,/admin/trust/grants/jwt-bearer/issuers,hydra-admin-low
+PUT,/admin/clients/{id},hydra-admin-low
+PATCH,/admin/clients/{id},hydra-admin-low
+DELETE,/admin/clients/{id},hydra-admin-low
+POST,/admin/keys/{set},hydra-admin-low
+PUT,/admin/keys/{set},hydra-admin-low
+DELETE,/admin/keys/{set},hydra-admin-low
+PUT,/admin/keys/{set}/{kid},hydra-admin-low
+DELETE,/admin/keys/{set}/{kid},hydra-admin-low
+DELETE,/admin/trust/grants/jwt-bearer/issuers/{id},hydra-admin-low
+OPTIONS,/admin/clients,hydra-admin-high
+GET,/admin/oauth2/auth/requests/consent,hydra-admin-high
+PUT,/admin/oauth2/auth/requests/consent/accept,hydra-admin-high
+PUT,/admin/oauth2/auth/requests/consent/reject,hydra-admin-high
+PUT,/admin/oauth2/auth/requests/device/accept,hydra-admin-high
+GET,/admin/oauth2/auth/requests/login,hydra-admin-high
+PUT,/admin/oauth2/auth/requests/login/accept,hydra-admin-high
+PUT,/admin/oauth2/auth/requests/login/reject,hydra-admin-high
+GET,/admin/oauth2/auth/requests/logout,hydra-admin-high
+PUT,/admin/oauth2/auth/requests/logout/accept,hydra-admin-high
+PUT,/admin/oauth2/auth/requests/logout/reject,hydra-admin-high
+GET,/admin/oauth2/auth/sessions/consent,hydra-admin-high
+POST,/admin/oauth2/introspect,hydra-admin-high
+GET,/oauth2/device/verify,hydra-admin-high
+GET,/admin/clients/{id},hydra-admin-high
+OPTIONS,/admin/clients/{id},hydra-admin-high
+GET,/oauth2/register/{id},hydra-admin-high
+GET,/oauth2/auth,hydra-public-medium
+POST,/oauth2/auth,hydra-public-medium
+POST,/oauth2/revoke,hydra-public-medium
+GET,/oauth2/sessions/logout,hydra-public-medium
+POST,/oauth2/sessions/logout,hydra-public-medium
+POST,/oauth2/token,hydra-public-medium
+GET,/userinfo,hydra-public-medium
+POST,/oauth2/register,hydra-public-low
+PUT,/oauth2/register/{id},hydra-public-low
+DELETE,/oauth2/register/{id},hydra-public-low
+PUT,/admin/relation-tuples,keto-admin-low
+PATCH,/admin/relation-tuples,keto-admin-low
+DELETE,/admin/relation-tuples,keto-admin-low
+GET,/namespaces,keto-admin-low
+POST,/ory.keto.relation_tuples.v1alpha2.WriteService/TransactRelationTuples,keto-admin-low
+POST,/opl/syntax/check,keto-admin-medium
+GET,/relation-tuples,keto-admin-medium
+GET,/relation-tuples/expand,keto-admin-medium
+POST,/ory.keto.relation_tuples.v1alpha2.CheckService/BatchCheck,keto-public-high
+POST,/ory.keto.relation_tuples.v1alpha2.CheckService/Check,keto-public-high
+POST,/relation-tuples/batch/check,keto-public-high
+GET,/relation-tuples/check,keto-public-high
+POST,/relation-tuples/check,keto-public-high
+GET,/relation-tuples/check/openapi,keto-public-high
+POST,/relation-tuples/check/openapi,keto-public-high
+GET,/admin/courier/messages,kratos-admin-low
+POST,/admin/identities,kratos-admin-low
+PATCH,/admin/identities,kratos-admin-low
+DELETE,/admin/identities/{id}/sessions,kratos-admin-low
+POST,/admin/recovery/code,kratos-admin-low
+POST,/admin/recovery/link,kratos-admin-low
+PATCH,/admin/sessions/{id}/extend,kratos-admin-low
+POST,/scim/{name}/v2/Groups,kratos-admin-low
+POST,/scim/{name}/v2/Users,kratos-admin-low
+PUT,/admin/identities/{id},kratos-admin-low
+PATCH,/admin/identities/{id},kratos-admin-low
+DELETE,/admin/identities/{id},kratos-admin-low
+DELETE,/admin/identities/{id}/credentials/{type},kratos-admin-low
+DELETE,/admin/sessions/{id},kratos-admin-low
+PUT,/scim/{name}/v2/Groups/{id},kratos-admin-low
+PATCH,/scim/{name}/v2/Groups/{id},kratos-admin-low
+DELETE,/scim/{name}/v2/Groups/{id},kratos-admin-low
+PUT,/scim/{name}/v2/Users/{id},kratos-admin-low
+PATCH,/scim/{name}/v2/Users/{id},kratos-admin-low
+DELETE,/scim/{name}/v2/Users/{id},kratos-admin-low
+GET,/admin/identities,kratos-admin-medium
+GET,/admin/identities/{id}/sessions,kratos-admin-medium
+GET,/admin/sessions,kratos-admin-medium
+GET,/schemas,kratos-admin-medium
+GET,/scim/{name}/v2/Groups,kratos-admin-medium
+GET,/scim/{name}/v2/Schemas,kratos-admin-medium
+GET,/scim/{name}/v2/ServiceProviderConfig,kratos-admin-medium
+GET,/scim/{name}/v2/Users,kratos-admin-medium
+GET,/admin/courier/messages/{id},kratos-admin-medium
+GET,/admin/identities/by/external/{externalID},kratos-admin-medium
+GET,/schemas/{id},kratos-admin-medium
+GET,/scim/{name}/v2/Groups/{id},kratos-admin-medium
+GET,/scim/{name}/v2/Schemas/{id},kratos-admin-medium
+GET,/scim/{name}/v2/Users/{id},kratos-admin-medium
+GET,/self-service/errors,kratos-public-high
+GET,/self-service/fed-cm/parameters,kratos-public-high
+HEAD,/self-service/fed-cm/parameters,kratos-public-high
+OPTIONS,/self-service/fed-cm/token,kratos-public-high
+GET,/self-service/login,kratos-public-high
+OPTIONS,/self-service/login,kratos-public-high
+HEAD,/self-service/login/browser,kratos-public-high
+OPTIONS,/self-service/login/browser,kratos-public-high
+GET,/self-service/login/flows,kratos-public-high
+OPTIONS,/self-service/login/flows,kratos-public-high
+GET,/self-service/logout,kratos-public-high
+OPTIONS,/self-service/logout,kratos-public-high
+OPTIONS,/self-service/logout/browser,kratos-public-high
+GET,/self-service/methods/oidc/callback,kratos-public-high
+GET,/self-service/recovery,kratos-public-high
+HEAD,/self-service/recovery,kratos-public-high
+OPTIONS,/self-service/recovery,kratos-public-high
+HEAD,/self-service/recovery/browser,kratos-public-high
+OPTIONS,/self-service/recovery/browser,kratos-public-high
+GET,/self-service/recovery/flows,kratos-public-high
+OPTIONS,/self-service/recovery/flows,kratos-public-high
+GET,/self-service/registration,kratos-public-high
+OPTIONS,/self-service/registration,kratos-public-high
+HEAD,/self-service/registration/browser,kratos-public-high
+OPTIONS,/self-service/registration/browser,kratos-public-high
+GET,/self-service/registration/flows,kratos-public-high
+GET,/self-service/settings,kratos-public-high
+OPTIONS,/self-service/settings,kratos-public-high
+GET,/self-service/settings/flows,kratos-public-high
+GET,/self-service/verification,kratos-public-high
+HEAD,/self-service/verification,kratos-public-high
+OPTIONS,/self-service/verification,kratos-public-high
+HEAD,/self-service/verification/browser,kratos-public-high
+GET,/self-service/verification/flows,kratos-public-high
+OPTIONS,/self-service/verification/flows,kratos-public-high
+OPTIONS,/sessions,kratos-public-high
+GET,/sessions/whoami,kratos-public-high
+HEAD,/self-service/methods/oidc/callback/{id},kratos-public-high
+HEAD,/self-service/methods/oidc/callback/{name},kratos-public-high
+POST,/self-service/fed-cm/token,kratos-public-low
+POST,/self-service/login,kratos-public-low
+POST,/self-service/recovery,kratos-public-low
+POST,/self-service/registration,kratos-public-low
+POST,/self-service/settings,kratos-public-low
+POST,/self-service/verification,kratos-public-low
+DELETE,/sessions,kratos-public-low
+DELETE,/sessions/{id},kratos-public-low
+GET,/self-service/login/api,kratos-public-medium
+GET,/self-service/login/browser,kratos-public-medium
+POST,/self-service/login/browser,kratos-public-medium
+DELETE,/self-service/logout/api,kratos-public-medium
+GET,/self-service/logout/browser,kratos-public-medium
+GET,/self-service/recovery/api,kratos-public-medium
+GET,/self-service/recovery/browser,kratos-public-medium
+GET,/self-service/registration/api,kratos-public-medium
+GET,/self-service/registration/browser,kratos-public-medium
+GET,/self-service/settings/api,kratos-public-medium
+GET,/self-service/settings/browser,kratos-public-medium
+GET,/self-service/verification/api,kratos-public-medium
+GET,/self-service/verification/browser,kratos-public-medium
+GET,/sessions,kratos-public-medium
+GET,/sessions/token-exchange,kratos-public-medium
+GET,/self-service/methods/oidc/callback/{id},kratos-public-medium
+GET,/self-service/methods/oidc/callback/{name},kratos-public-medium
+GET,/self-service/methods/oidc/organizations/{id},kratos-public-medium
+GET,/self-service/methods/saml/callback/{name},kratos-public-medium
+GET,/self-service/methods/saml/organizations/{id},kratos-public-medium
+GET,/admin/identities/{id},kratos-admin-high
+OPTIONS,/admin/identities/{id},kratos-admin-high
+GET,/admin/sessions/{id},kratos-admin-high
+GET,/api/v1/dsync,polis-public-high
+GET,/api/v1/dsync/events,polis-public-high
+GET,/api/v1/dsync/groups,polis-public-high
+GET,/api/v1/dsync/product,polis-public-high
+GET,/api/v1/dsync/setuplinks,polis-public-high
+GET,/api/v1/dsync/setuplinks/product,polis-public-high
+GET,/api/v1/dsync/users,polis-public-high
+GET,/api/v1/identity-federation,polis-public-high
+GET,/api/v1/identity-federation/product,polis-public-high
+GET,/api/v1/sso,polis-public-high
+GET,/api/v1/sso/product,polis-public-high
+GET,/api/v1/sso-traces,polis-public-high
+GET,/api/v1/sso-traces/product,polis-public-high
+GET,/oauth/userinfo,polis-public-high
+GET,/saml/.well-known/idp-metadata,polis-public-high
+GET,/saml/.well-known/sp-metadata,polis-public-high
+GET,/saml/.well-known/saml.cer,polis-public-high
+GET,/saml/api/error,polis-public-high
+GET,/api/v1/dsync/groups/{groupId},polis-public-high
+GET,/api/v1/dsync/groups/{groupId}/members,polis-public-high
+GET,/api/v1/dsync/users/{userId},polis-public-high
+DELETE,/api/v1/dsync/setuplinks,polis-public-medium
+DELETE,/api/v1/identity-federation,polis-public-medium
+DELETE,/api/v1/sso,polis-public-medium
+PATCH,/api/v1/identity-federation,polis-public-medium
+PATCH,/api/v1/sso,polis-public-medium
+POST,/api/v1/dsync,polis-public-medium
+POST,/api/v1/dsync/setuplinks,polis-public-medium
+POST,/api/v1/identity-federation,polis-public-medium
+POST,/api/v1/sso,polis-public-medium
+POST,/oauth/token,polis-public-medium
+GET,/saml/api/identity-federation/sso,polis-public-medium
+POST,/saml/api/identity-federation/sso,polis-public-medium
+GET,/saml/api/oauth/authorize,polis-public-medium
+POST,/saml/api/oauth/authorize,polis-public-medium
+GET,/saml/api/oauth/oidc,polis-public-medium
+POST,/saml/api/oauth/saml,polis-public-medium
+PATCH,/api/v1/dsync/{directoryId},polis-public-medium
diff --git a/src/lib/rate-limits/data/bucket-to-threshold-20260311.csv b/src/lib/rate-limits/data/bucket-to-threshold-20260311.csv
deleted file mode 100644
index a18175574f..0000000000
--- a/src/lib/rate-limits/data/bucket-to-threshold-20260311.csv
+++ /dev/null
@@ -1,205 +0,0 @@
-bucketname,tier,env,rpm,rps
-hydra-admin-high,Develop,dev,40,3
-hydra-admin-high,Develop,prod,40,3
-hydra-admin-high,Develop,stage,40,3
-hydra-admin-high,Enterprise,dev,80,4
-hydra-admin-high,Enterprise,prod,4800,160
-hydra-admin-high,Enterprise,stage,80,4
-hydra-admin-high,Growth,dev,80,4
-hydra-admin-high,Growth,prod,2400,80
-hydra-admin-high,Growth,stage,80,4
-hydra-admin-high,Production,dev,80,4
-hydra-admin-high,Production,prod,250,10
-hydra-admin-high,Production,stage,80,4
-hydra-admin-low,Develop,dev,20,2
-hydra-admin-low,Develop,prod,20,2
-hydra-admin-low,Develop,stage,20,2
-hydra-admin-low,Enterprise,dev,40,3
-hydra-admin-low,Enterprise,prod,320,10
-hydra-admin-low,Enterprise,stage,40,3
-hydra-admin-low,Growth,dev,40,3
-hydra-admin-low,Growth,prod,160,7
-hydra-admin-low,Growth,stage,40,3
-hydra-admin-low,Production,dev,40,3
-hydra-admin-low,Production,prod,80,4
-hydra-admin-low,Production,stage,40,3
-hydra-admin-medium,Develop,dev,20,2
-hydra-admin-medium,Develop,prod,20,2
-hydra-admin-medium,Develop,stage,20,2
-hydra-admin-medium,Enterprise,dev,40,3
-hydra-admin-medium,Enterprise,prod,320,10
-hydra-admin-medium,Enterprise,stage,40,3
-hydra-admin-medium,Growth,dev,40,3
-hydra-admin-medium,Growth,prod,160,7
-hydra-admin-medium,Growth,stage,40,3
-hydra-admin-medium,Production,dev,40,3
-hydra-admin-medium,Production,prod,80,4
-hydra-admin-medium,Production,stage,40,3
-hydra-public-high,Develop,dev,60,3
-hydra-public-high,Develop,prod,60,3
-hydra-public-high,Develop,stage,60,3
-hydra-public-high,Enterprise,dev,120,7
-hydra-public-high,Enterprise,prod,1500,55
-hydra-public-high,Enterprise,stage,120,7
-hydra-public-high,Growth,dev,120,7
-hydra-public-high,Growth,prod,720,30
-hydra-public-high,Growth,stage,120,7
-hydra-public-high,Production,dev,120,7
-hydra-public-high,Production,prod,250,10
-hydra-public-high,Production,stage,120,7
-hydra-public-low,Develop,dev,20,2
-hydra-public-low,Develop,prod,20,2
-hydra-public-low,Develop,stage,20,2
-hydra-public-low,Enterprise,dev,40,3
-hydra-public-low,Enterprise,prod,320,10
-hydra-public-low,Enterprise,stage,40,3
-hydra-public-low,Growth,dev,40,3
-hydra-public-low,Growth,prod,160,7
-hydra-public-low,Growth,stage,40,3
-hydra-public-low,Production,dev,40,3
-hydra-public-low,Production,prod,80,4
-hydra-public-low,Production,stage,40,3
-hydra-public-medium,Develop,dev,40,3
-hydra-public-medium,Develop,prod,40,3
-hydra-public-medium,Develop,stage,40,3
-hydra-public-medium,Enterprise,dev,80,4
-hydra-public-medium,Enterprise,prod,3000,100
-hydra-public-medium,Enterprise,stage,80,4
-hydra-public-medium,Growth,dev,80,4
-hydra-public-medium,Growth,prod,1000,35
-hydra-public-medium,Growth,stage,80,4
-hydra-public-medium,Production,dev,80,4
-hydra-public-medium,Production,prod,320,10
-hydra-public-medium,Production,stage,80,4
-keto-admin-low,Develop,dev,60,3
-keto-admin-low,Develop,prod,60,3
-keto-admin-low,Develop,stage,60,3
-keto-admin-low,Enterprise,dev,120,7
-keto-admin-low,Enterprise,prod,1000,35
-keto-admin-low,Enterprise,stage,120,7
-keto-admin-low,Growth,dev,120,7
-keto-admin-low,Growth,prod,250,10
-keto-admin-low,Growth,stage,120,7
-keto-admin-low,Production,dev,120,7
-keto-admin-low,Production,prod,250,10
-keto-admin-low,Production,stage,120,7
-keto-admin-medium,Develop,dev,100,5
-keto-admin-medium,Develop,prod,100,5
-keto-admin-medium,Develop,stage,100,5
-keto-admin-medium,Enterprise,dev,200,10
-keto-admin-medium,Enterprise,prod,2000,70
-keto-admin-medium,Enterprise,stage,200,10
-keto-admin-medium,Growth,dev,200,10
-keto-admin-medium,Growth,prod,1000,35
-keto-admin-medium,Growth,stage,200,10
-keto-admin-medium,Production,dev,200,10
-keto-admin-medium,Production,prod,500,20
-keto-admin-medium,Production,stage,200,10
-keto-public-high,Develop,dev,120,7
-keto-public-high,Develop,prod,120,7
-keto-public-high,Develop,stage,120,7
-keto-public-high,Enterprise,dev,240,10
-keto-public-high,Enterprise,prod,18000,600
-keto-public-high,Enterprise,stage,240,10
-keto-public-high,Growth,dev,240,10
-keto-public-high,Growth,prod,9000,300
-keto-public-high,Growth,stage,240,10
-keto-public-high,Production,dev,240,10
-keto-public-high,Production,prod,1500,55
-keto-public-high,Production,stage,240,10
-kratos-admin-high,Develop,dev,100,5
-kratos-admin-high,Develop,prod,100,5
-kratos-admin-high,Develop,stage,100,5
-kratos-admin-high,Enterprise,dev,200,10
-kratos-admin-high,Enterprise,prod,2400,80
-kratos-admin-high,Enterprise,stage,200,10
-kratos-admin-high,Growth,dev,200,10
-kratos-admin-high,Growth,prod,1200,45
-kratos-admin-high,Growth,stage,200,10
-kratos-admin-high,Production,dev,200,10
-kratos-admin-high,Production,prod,400,15
-kratos-admin-high,Production,stage,200,10
-kratos-admin-low,Develop,dev,100,5
-kratos-admin-low,Develop,prod,100,5
-kratos-admin-low,Develop,stage,100,5
-kratos-admin-low,Enterprise,dev,200,10
-kratos-admin-low,Enterprise,prod,2400,80
-kratos-admin-low,Enterprise,stage,200,10
-kratos-admin-low,Growth,dev,200,10
-kratos-admin-low,Growth,prod,1200,45
-kratos-admin-low,Growth,stage,200,10
-kratos-admin-low,Production,dev,200,10
-kratos-admin-low,Production,prod,400,15
-kratos-admin-low,Production,stage,200,10
-kratos-admin-medium,Develop,dev,50,3
-kratos-admin-medium,Develop,prod,50,3
-kratos-admin-medium,Develop,stage,50,3
-kratos-admin-medium,Enterprise,dev,100,5
-kratos-admin-medium,Enterprise,prod,800,30
-kratos-admin-medium,Enterprise,stage,100,5
-kratos-admin-medium,Growth,dev,100,5
-kratos-admin-medium,Growth,prod,400,15
-kratos-admin-medium,Growth,stage,100,5
-kratos-admin-medium,Production,dev,100,5
-kratos-admin-medium,Production,prod,200,10
-kratos-admin-medium,Production,stage,100,5
-kratos-public-high,Develop,dev,200,10
-kratos-public-high,Develop,prod,200,10
-kratos-public-high,Develop,stage,200,10
-kratos-public-high,Enterprise,dev,400,15
-kratos-public-high,Enterprise,prod,21600,700
-kratos-public-high,Enterprise,stage,400,15
-kratos-public-high,Growth,dev,400,15
-kratos-public-high,Growth,prod,7200,240
-kratos-public-high,Growth,stage,400,15
-kratos-public-high,Production,dev,400,15
-kratos-public-high,Production,prod,2400,80
-kratos-public-high,Production,stage,400,15
-kratos-public-low,Develop,dev,50,3
-kratos-public-low,Develop,prod,50,3
-kratos-public-low,Develop,stage,50,3
-kratos-public-low,Enterprise,dev,100,5
-kratos-public-low,Enterprise,prod,1200,45
-kratos-public-low,Enterprise,stage,100,5
-kratos-public-low,Growth,dev,100,5
-kratos-public-low,Growth,prod,600,25
-kratos-public-low,Growth,stage,100,5
-kratos-public-low,Production,dev,100,5
-kratos-public-low,Production,prod,200,10
-kratos-public-low,Production,stage,100,5
-kratos-public-medium,Develop,dev,100,5
-kratos-public-medium,Develop,prod,100,5
-kratos-public-medium,Develop,stage,100,5
-kratos-public-medium,Enterprise,dev,200,10
-kratos-public-medium,Enterprise,prod,1600,55
-kratos-public-medium,Enterprise,stage,200,10
-kratos-public-medium,Growth,dev,200,10
-kratos-public-medium,Growth,prod,800,30
-kratos-public-medium,Growth,stage,200,10
-kratos-public-medium,Production,dev,200,10
-kratos-public-medium,Production,prod,400,15
-kratos-public-medium,Production,stage,200,10
-polis-public-high,Develop,dev,15,2
-polis-public-high,Develop,prod,15,2
-polis-public-high,Develop,stage,15,2
-polis-public-high,Enterprise,dev,30,2
-polis-public-high,Enterprise,prod,250,10
-polis-public-high,Enterprise,stage,30,2
-polis-public-high,Growth,dev,30,2
-polis-public-high,Growth,prod,120,7
-polis-public-high,Growth,stage,30,2
-polis-public-high,Production,dev,30,2
-polis-public-high,Production,prod,60,3
-polis-public-high,Production,stage,30,2
-polis-public-medium,Develop,dev,60,3
-polis-public-medium,Develop,prod,60,3
-polis-public-medium,Develop,stage,60,3
-polis-public-medium,Enterprise,dev,120,7
-polis-public-medium,Enterprise,prod,1000,35
-polis-public-medium,Enterprise,stage,120,7
-polis-public-medium,Growth,dev,120,7
-polis-public-medium,Growth,prod,500,20
-polis-public-medium,Growth,stage,120,7
-polis-public-medium,Production,dev,120,7
-polis-public-medium,Production,prod,250,10
-polis-public-medium,Production,stage,120,7
diff --git a/src/lib/rate-limits/data/bucket-to-threshold.csv b/src/lib/rate-limits/data/bucket-to-threshold.csv
new file mode 100644
index 0000000000..9b7bef10fe
--- /dev/null
+++ b/src/lib/rate-limits/data/bucket-to-threshold.csv
@@ -0,0 +1,205 @@
+bucketname,tier,env,rpm,rps
+hydra-admin-high,Develop,dev,80,5
+hydra-admin-high,Develop,prod,80,5
+hydra-admin-high,Develop,stage,80,5
+hydra-admin-high,Enterprise,dev,175,8
+hydra-admin-high,Enterprise,prod,8750,351
+hydra-admin-high,Enterprise,stage,175,8
+hydra-admin-high,Growth,dev,175,8
+hydra-admin-high,Growth,prod,4300,173
+hydra-admin-high,Growth,stage,175,8
+hydra-admin-high,Production,dev,175,8
+hydra-admin-high,Production,prod,175,8
+hydra-admin-high,Production,stage,175,8
+hydra-admin-low,Develop,dev,15,5
+hydra-admin-low,Develop,prod,15,5
+hydra-admin-low,Develop,stage,15,5
+hydra-admin-low,Enterprise,dev,30,5
+hydra-admin-low,Enterprise,prod,700,29
+hydra-admin-low,Enterprise,stage,30,5
+hydra-admin-low,Growth,dev,30,5
+hydra-admin-low,Growth,prod,350,15
+hydra-admin-low,Growth,stage,30,5
+hydra-admin-low,Production,dev,30,5
+hydra-admin-low,Production,prod,35,5
+hydra-admin-low,Production,stage,30,5
+hydra-admin-medium,Develop,dev,15,5
+hydra-admin-medium,Develop,prod,15,5
+hydra-admin-medium,Develop,stage,15,5
+hydra-admin-medium,Enterprise,dev,30,5
+hydra-admin-medium,Enterprise,prod,125,6
+hydra-admin-medium,Enterprise,stage,30,5
+hydra-admin-medium,Growth,dev,30,5
+hydra-admin-medium,Growth,prod,60,5
+hydra-admin-medium,Growth,stage,30,5
+hydra-admin-medium,Production,dev,30,5
+hydra-admin-medium,Production,prod,30,5
+hydra-admin-medium,Production,stage,30,5
+hydra-public-high,Develop,dev,60,5
+hydra-public-high,Develop,prod,60,5
+hydra-public-high,Develop,stage,60,5
+hydra-public-high,Enterprise,dev,125,6
+hydra-public-high,Enterprise,prod,1800,73
+hydra-public-high,Enterprise,stage,125,6
+hydra-public-high,Growth,dev,125,6
+hydra-public-high,Growth,prod,600,25
+hydra-public-high,Growth,stage,125,6
+hydra-public-high,Production,dev,125,6
+hydra-public-high,Production,prod,200,9
+hydra-public-high,Production,stage,125,6
+hydra-public-low,Develop,dev,15,5
+hydra-public-low,Develop,prod,15,5
+hydra-public-low,Develop,stage,15,5
+hydra-public-low,Enterprise,dev,30,5
+hydra-public-low,Enterprise,prod,450,19
+hydra-public-low,Enterprise,stage,30,5
+hydra-public-low,Growth,dev,30,5
+hydra-public-low,Growth,prod,150,7
+hydra-public-low,Growth,stage,30,5
+hydra-public-low,Production,dev,30,5
+hydra-public-low,Production,prod,45,5
+hydra-public-low,Production,stage,30,5
+hydra-public-medium,Develop,dev,125,6
+hydra-public-medium,Develop,prod,125,6
+hydra-public-medium,Develop,stage,125,6
+hydra-public-medium,Enterprise,dev,250,11
+hydra-public-medium,Enterprise,prod,3600,145
+hydra-public-medium,Enterprise,stage,250,11
+hydra-public-medium,Growth,dev,250,11
+hydra-public-medium,Growth,prod,1200,49
+hydra-public-medium,Growth,stage,250,11
+hydra-public-medium,Production,dev,250,11
+hydra-public-medium,Production,prod,375,16
+hydra-public-medium,Production,stage,250,11
+keto-admin-low,Develop,dev,80,5
+keto-admin-low,Develop,prod,80,5
+keto-admin-low,Develop,stage,80,5
+keto-admin-low,Enterprise,dev,175,8
+keto-admin-low,Enterprise,prod,700,29
+keto-admin-low,Enterprise,stage,175,8
+keto-admin-low,Growth,dev,175,8
+keto-admin-low,Growth,prod,350,15
+keto-admin-low,Growth,stage,175,8
+keto-admin-low,Production,dev,175,8
+keto-admin-low,Production,prod,175,8
+keto-admin-low,Production,stage,175,8
+keto-admin-medium,Develop,dev,125,6
+keto-admin-medium,Develop,prod,125,6
+keto-admin-medium,Develop,stage,125,6
+keto-admin-medium,Enterprise,dev,250,11
+keto-admin-medium,Enterprise,prod,2200,89
+keto-admin-medium,Enterprise,stage,250,11
+keto-admin-medium,Growth,dev,250,11
+keto-admin-medium,Growth,prod,1100,45
+keto-admin-medium,Growth,stage,250,11
+keto-admin-medium,Production,dev,250,11
+keto-admin-medium,Production,prod,550,23
+keto-admin-medium,Production,stage,250,11
+keto-public-high,Develop,dev,250,11
+keto-public-high,Develop,prod,250,11
+keto-public-high,Develop,stage,250,11
+keto-public-high,Enterprise,dev,500,21
+keto-public-high,Enterprise,prod,7500,301
+keto-public-high,Enterprise,stage,500,21
+keto-public-high,Growth,dev,500,21
+keto-public-high,Growth,prod,2500,101
+keto-public-high,Growth,stage,500,21
+keto-public-high,Production,dev,500,21
+keto-public-high,Production,prod,750,31
+keto-public-high,Production,stage,500,21
+kratos-admin-high,Develop,dev,40,5
+kratos-admin-high,Develop,prod,40,5
+kratos-admin-high,Develop,stage,40,5
+kratos-admin-high,Enterprise,dev,80,5
+kratos-admin-high,Enterprise,prod,1000,41
+kratos-admin-high,Enterprise,stage,80,5
+kratos-admin-high,Growth,dev,80,5
+kratos-admin-high,Growth,prod,500,21
+kratos-admin-high,Growth,stage,80,5
+kratos-admin-high,Production,dev,80,5
+kratos-admin-high,Production,prod,80,5
+kratos-admin-high,Production,stage,80,5
+kratos-admin-low,Develop,dev,80,5
+kratos-admin-low,Develop,prod,80,5
+kratos-admin-low,Develop,stage,80,5
+kratos-admin-low,Enterprise,dev,175,8
+kratos-admin-low,Enterprise,prod,850,35
+kratos-admin-low,Enterprise,stage,175,8
+kratos-admin-low,Growth,dev,175,8
+kratos-admin-low,Growth,prod,425,18
+kratos-admin-low,Growth,stage,175,8
+kratos-admin-low,Production,dev,175,8
+kratos-admin-low,Production,prod,175,8
+kratos-admin-low,Production,stage,175,8
+kratos-admin-medium,Develop,dev,25,5
+kratos-admin-medium,Develop,prod,25,5
+kratos-admin-medium,Develop,stage,25,5
+kratos-admin-medium,Enterprise,dev,50,5
+kratos-admin-medium,Enterprise,prod,400,17
+kratos-admin-medium,Enterprise,stage,50,5
+kratos-admin-medium,Growth,dev,50,5
+kratos-admin-medium,Growth,prod,200,9
+kratos-admin-medium,Growth,stage,50,5
+kratos-admin-medium,Production,dev,50,5
+kratos-admin-medium,Production,prod,90,5
+kratos-admin-medium,Production,stage,50,5
+kratos-public-high,Develop,dev,450,19
+kratos-public-high,Develop,prod,450,19
+kratos-public-high,Develop,stage,450,19
+kratos-public-high,Enterprise,dev,900,37
+kratos-public-high,Enterprise,prod,15000,601
+kratos-public-high,Enterprise,stage,900,37
+kratos-public-high,Growth,dev,900,37
+kratos-public-high,Growth,prod,4500,181
+kratos-public-high,Growth,stage,900,37
+kratos-public-high,Production,dev,900,37
+kratos-public-high,Production,prod,1400,57
+kratos-public-high,Production,stage,900,37
+kratos-public-low,Develop,dev,20,5
+kratos-public-low,Develop,prod,20,5
+kratos-public-low,Develop,stage,20,5
+kratos-public-low,Enterprise,dev,40,5
+kratos-public-low,Enterprise,prod,600,25
+kratos-public-low,Enterprise,stage,40,5
+kratos-public-low,Growth,dev,40,5
+kratos-public-low,Growth,prod,200,9
+kratos-public-low,Growth,stage,40,5
+kratos-public-low,Production,dev,40,5
+kratos-public-low,Production,prod,60,5
+kratos-public-low,Production,stage,40,5
+kratos-public-medium,Develop,dev,100,5
+kratos-public-medium,Develop,prod,100,5
+kratos-public-medium,Develop,stage,100,5
+kratos-public-medium,Enterprise,dev,200,9
+kratos-public-medium,Enterprise,prod,3000,121
+kratos-public-medium,Enterprise,stage,200,9
+kratos-public-medium,Growth,dev,200,9
+kratos-public-medium,Growth,prod,1000,41
+kratos-public-medium,Growth,stage,200,9
+kratos-public-medium,Production,dev,200,9
+kratos-public-medium,Production,prod,325,14
+kratos-public-medium,Production,stage,200,9
+polis-public-high,Develop,dev,15,5
+polis-public-high,Develop,prod,15,5
+polis-public-high,Develop,stage,15,5
+polis-public-high,Enterprise,dev,30,5
+polis-public-high,Enterprise,prod,450,19
+polis-public-high,Enterprise,stage,30,5
+polis-public-high,Growth,dev,30,5
+polis-public-high,Growth,prod,150,7
+polis-public-high,Growth,stage,30,5
+polis-public-high,Production,dev,30,5
+polis-public-high,Production,prod,45,5
+polis-public-high,Production,stage,30,5
+polis-public-medium,Develop,dev,20,5
+polis-public-medium,Develop,prod,20,5
+polis-public-medium,Develop,stage,20,5
+polis-public-medium,Enterprise,dev,40,5
+polis-public-medium,Enterprise,prod,600,25
+polis-public-medium,Enterprise,stage,40,5
+polis-public-medium,Growth,dev,40,5
+polis-public-medium,Growth,prod,200,9
+polis-public-medium,Growth,stage,40,5
+polis-public-medium,Production,dev,40,5
+polis-public-medium,Production,prod,60,5
+polis-public-medium,Production,stage,40,5
From 986b94481992a0e0f2007c9d6d0e851b5e559020 Mon Sep 17 00:00:00 2001
From: Wassim Bougarfa <12980387+wassimoo@users.noreply.github.com>
Date: Wed, 6 May 2026 13:57:09 +0200
Subject: [PATCH 18/37] chore: update dependencies in package-lock.json and
package.json
---
package-lock.json | 162 ++++++++++++++++++----------------------------
package.json | 4 +-
2 files changed, 65 insertions(+), 101 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 3183eeee47..7f170acc22 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,15 +9,15 @@
"version": "1.0.0",
"dependencies": {
"@apidevtools/json-schema-ref-parser": "14.2.0",
- "@docusaurus/core": "3.9.2",
- "@docusaurus/plugin-client-redirects": "3.9.2",
- "@docusaurus/plugin-content-docs": "3.9.2",
- "@docusaurus/plugin-content-pages": "3.9.2",
- "@docusaurus/plugin-sitemap": "3.9.2",
+ "@docusaurus/core": "3.10.0",
+ "@docusaurus/plugin-client-redirects": "3.10.0",
+ "@docusaurus/plugin-content-docs": "3.10.0",
+ "@docusaurus/plugin-content-pages": "3.10.0",
+ "@docusaurus/plugin-sitemap": "3.10.0",
"@docusaurus/plugin-svgr": "^3.9.2",
- "@docusaurus/preset-classic": "3.9.2",
- "@docusaurus/theme-classic": "3.9.2",
- "@docusaurus/theme-search-algolia": "3.9.2",
+ "@docusaurus/preset-classic": "3.10.0",
+ "@docusaurus/theme-classic": "3.10.0",
+ "@docusaurus/theme-search-algolia": "3.10.0",
"@iconify-json/tabler": "1.2.19",
"@octokit/rest": "20.0.2",
"@ory/client-fetch": "1.15.16",
@@ -28,7 +28,7 @@
"@tanstack/react-query": "^5.64.2",
"@vercel/speed-insights": "2.0.0",
"@xyflow/react": "^12.10.1",
- "axios": "^1.13.2",
+ "axios": "^1.16.0",
"buffer": "^6.0.3",
"classnames": "2.5.1",
"clsx": "2.1.0",
@@ -215,9 +215,10 @@
}
},
"node_modules/@algolia/client-search": {
- "version": "5.44.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.44.0.tgz",
- "integrity": "sha512-/FRKUM1G4xn3vV8+9xH1WJ9XknU8rkBGlefruq9jDhYUAvYozKimhrmC2pRqw/RyHhPivmgZCRuC8jHP8piz4Q==",
+ "version": "5.51.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.51.0.tgz",
+ "integrity": "sha512-DWVIlj6RqcvdhwP0gBU9OpOQPnHdcAk9jlT+z8rsNb2+liWv4eUlfQZ7saGBraFsnygEHD3PtdppIHvqwBAb5w==",
+ "license": "MIT",
"dependencies": {
"@algolia/client-common": "5.51.0",
"@algolia/requester-browser-xhr": "5.51.0",
@@ -4127,9 +4128,10 @@
}
},
"node_modules/@docusaurus/plugin-content-docs": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz",
- "integrity": "sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==",
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.10.0.tgz",
+ "integrity": "sha512-9BjHhf15ct8Z7TThTC0xRndKDVvMKmVsAGAN7W9FpNRzfMdScOGcXtLmcCWtJGvAezjOJIm6CxOYCy3Io5+RnQ==",
+ "license": "MIT",
"dependencies": {
"@docusaurus/core": "3.10.0",
"@docusaurus/logger": "3.10.0",
@@ -4301,9 +4303,9 @@
}
},
"node_modules/@docusaurus/plugin-svgr": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.9.2.tgz",
- "integrity": "sha512-n+1DE+5b3Lnf27TgVU5jM1d4x5tUh2oW5LTsBxJX4PsAPV0JGcmI6p3yLYtEY0LRVEIJh+8RsdQmRE66wSV8mw==",
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.10.0.tgz",
+ "integrity": "sha512-lNljBESaETZqVBMPqkrGchr+UPT1eZzEPLmJhz8I76BxbjqgsUnRvrq6lQJ9sYjgmgX52KB7kkgczqd2yzoswQ==",
"license": "MIT",
"dependencies": {
"@docusaurus/core": "3.10.0",
@@ -4423,9 +4425,10 @@
}
},
"node_modules/@docusaurus/theme-common": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.9.2.tgz",
- "integrity": "sha512-6c4DAbR6n6nPbnZhY2V3tzpnKnGL+6aOsLvFL26VRqhlczli9eWG0VDUNoCQEPnGwDMhPS42UhSAnz5pThm5Ag==",
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.10.0.tgz",
+ "integrity": "sha512-Dkp1YXKn16ByCJAdIjbDIOpVb4Z66MsVD694/ilX1vAAHaVEMrVsf/NPd9VgreyFx08rJ9GqV1MtzsbTcU73Kg==",
+ "license": "MIT",
"dependencies": {
"@docusaurus/mdx-loader": "3.10.0",
"@docusaurus/module-type-aliases": "3.10.0",
@@ -4531,9 +4534,10 @@
}
},
"node_modules/@docusaurus/utils": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.9.2.tgz",
- "integrity": "sha512-lBSBiRruFurFKXr5Hbsl2thmGweAPmddhF3jb99U4EMDA5L+e5Y1rAkOS07Nvrup7HUMBDrCV45meaxZnt28nQ==",
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.10.0.tgz",
+ "integrity": "sha512-T3B0WTigsIthe0D4LQa2k+7bJY+c3WS+Wq2JhcznOSpn1lSN64yNtHQXboCj3QnUs1EuAZszQG1SHKu5w5ZrlA==",
+ "license": "MIT",
"dependencies": {
"@docusaurus/logger": "3.10.0",
"@docusaurus/types": "3.10.0",
@@ -8014,9 +8018,10 @@
}
},
"node_modules/acorn": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
- "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
+ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
+ "license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@@ -8420,11 +8425,12 @@
}
},
"node_modules/axios": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz",
- "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==",
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.0.tgz",
+ "integrity": "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==",
+ "license": "MIT",
"dependencies": {
- "follow-redirects": "^1.15.11",
+ "follow-redirects": "^1.16.0",
"form-data": "^4.0.5",
"proxy-from-env": "^2.1.0"
}
@@ -24720,27 +24726,6 @@
}
}
},
- "node_modules/terser-webpack-plugin/node_modules/ajv": {
- "version": "6.12.6",
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "license": "MIT",
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
"node_modules/terser-webpack-plugin/node_modules/jest-worker": {
"version": "27.5.1",
"license": "MIT",
@@ -26270,47 +26255,6 @@
"node": ">=10.13.0"
}
},
- "node_modules/webpack/node_modules/ajv": {
- "version": "6.12.6",
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/webpack/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "license": "MIT",
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/webpack/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "license": "MIT"
- },
- "node_modules/webpack/node_modules/schema-utils": {
- "version": "3.3.0",
- "license": "MIT",
- "dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
"node_modules/webpackbar": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz",
@@ -26801,12 +26745,32 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/zod": {
- "version": "4.1.12",
- "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz",
- "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==",
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
+ "node_modules/zustand": {
+ "version": "4.5.7",
+ "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.7.tgz",
+ "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==",
+ "license": "MIT",
+ "dependencies": {
+ "use-sync-external-store": "^1.2.2"
+ },
+ "engines": {
+ "node": ">=12.7.0"
+ },
+ "peerDependencies": {
+ "@types/react": ">=16.8",
+ "immer": ">=9.0.6",
+ "react": ">=16.8"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "immer": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ }
}
},
"node_modules/zwitch": {
diff --git a/package.json b/package.json
index dc188a82b1..bbf973be63 100644
--- a/package.json
+++ b/package.json
@@ -50,7 +50,7 @@
"@tanstack/react-query": "^5.64.2",
"@vercel/speed-insights": "2.0.0",
"@xyflow/react": "^12.10.1",
- "axios": "^1.13.2",
+ "axios": "^1.16.0",
"buffer": "^6.0.3",
"classnames": "2.5.1",
"clsx": "2.1.0",
@@ -104,4 +104,4 @@
"optionalDependencies": {
"@swc/core-darwin-x64": "1.4.8"
}
-}
\ No newline at end of file
+}
From 7838ac20c6c0607455f2462ea4e69606ed10ca26 Mon Sep 17 00:00:00 2001
From: unatasha8
Date: Mon, 11 May 2026 10:49:41 -0700
Subject: [PATCH 19/37] docs: added rate limit pages to sidebar file
---
docs/guides/rate-limits.mdx | 2 +-
package.json | 2 +-
sidebars.ts | 26 +++++++++++++++++++++++++-
3 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/docs/guides/rate-limits.mdx b/docs/guides/rate-limits.mdx
index 57b785cf6e..fcac97d77e 100644
--- a/docs/guides/rate-limits.mdx
+++ b/docs/guides/rate-limits.mdx
@@ -8,7 +8,7 @@ Ory Network uses rate limits to protect your applications against abuse and ensu
Ory is currently migrating to a new project rate limiting policy. New workspaces are automatically on the new policy; existing
customers are being migrated by subscription tier.
-## Which system applies to you?
+## Which rate limit system applies to you?
| You are... | Your system |
| -------------------------------------------------- | -------------------------------------------- |
diff --git a/package.json b/package.json
index bbf973be63..85873923bb 100644
--- a/package.json
+++ b/package.json
@@ -31,12 +31,12 @@
},
"dependencies": {
"@apidevtools/json-schema-ref-parser": "14.2.0",
- "@docusaurus/plugin-svgr": "^3.9.2",
"@docusaurus/core": "3.10.0",
"@docusaurus/plugin-client-redirects": "3.10.0",
"@docusaurus/plugin-content-docs": "3.10.0",
"@docusaurus/plugin-content-pages": "3.10.0",
"@docusaurus/plugin-sitemap": "3.10.0",
+ "@docusaurus/plugin-svgr": "^3.9.2",
"@docusaurus/preset-classic": "3.10.0",
"@docusaurus/theme-classic": "3.10.0",
"@docusaurus/theme-search-algolia": "3.10.0",
diff --git a/sidebars.ts b/sidebars.ts
index 2b4bb3f07c..0d4588276e 100644
--- a/sidebars.ts
+++ b/sidebars.ts
@@ -73,7 +73,31 @@ const api: SidebarItemsConfig = [
"concepts/personal-access-token",
"guides/cors",
"guides/api-rest-pagination",
- "guides/rate-limits",
+{
+ type: "category",
+ label: "Rate limits",
+ link: {
+ type: "doc",
+ id: "guides/rate-limits",
+ },
+ items: [
+ // ← restored items array
+ "guides/rate-limits-legacy",
+ {
+ // ← New rate limits as nested category
+ type: "category",
+ label: "Rate limits - New",
+ link: {
+ type: "doc",
+ id: "guides/rate-limits-new",
+ },
+ items: [
+ "guides/rate-limits-project",
+ "guides/rate-limits-endpoint",
+ ],
+ },
+ ],
+ },
"guides/ip-allowlist",
"api/eventual-consistency",
"kratos/reference/jsonnet",
From e30a9d580cd40c55883a2069295a5f006b952ffb Mon Sep 17 00:00:00 2001
From: Wassim Bougarfa <12980387+wassimoo@users.noreply.github.com>
Date: Wed, 13 May 2026 12:21:43 +0200
Subject: [PATCH 20/37] refactor: move RateLimitsTable import to its single
usage site
---
docs/guides/rate-limits-project.mdx | 2 ++
src/theme/MDXComponents.js | 2 --
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/docs/guides/rate-limits-project.mdx b/docs/guides/rate-limits-project.mdx
index a82b6c601b..63262d41e0 100644
--- a/docs/guides/rate-limits-project.mdx
+++ b/docs/guides/rate-limits-project.mdx
@@ -4,6 +4,8 @@ title: Project rate limits
sidebar_label: Project rate limits
---
+import RateLimitsTable from "@site/src/components/RateLimitsTable"
+
Each project has a set of rate limit buckets. A bucket is a named group of API endpoints that share the same rate limit threshold.
When a request comes in, Ory resolves which bucket the endpoint belongs to and applies the threshold for that bucket.
diff --git a/src/theme/MDXComponents.js b/src/theme/MDXComponents.js
index ccb2646128..ff02a7dfa1 100644
--- a/src/theme/MDXComponents.js
+++ b/src/theme/MDXComponents.js
@@ -4,7 +4,6 @@ import Tabs from "@theme/Tabs"
import TabItem from "@theme/TabItem"
import AjaxWarning from "./AjaxWarning"
import ConsoleLink from "../components/ConsoleLink/console-link"
-import RateLimitsTable from "../components/RateLimitsTable"
import SameDeploymentLink from "../components/SameDeploymentLink"
export default {
@@ -12,7 +11,6 @@ export default {
...MDXComponents,
AjaxWarning,
ConsoleLink,
- RateLimitsTable,
SameDeploymentLink,
Tabs,
TabItem,
From 02f7a440c10def7b204b0f0f83e47bcae19606a6 Mon Sep 17 00:00:00 2001
From: Wassim Bougarfa <12980387+wassimoo@users.noreply.github.com>
Date: Wed, 13 May 2026 12:27:50 +0200
Subject: [PATCH 21/37] fix: run format
---
sidebars.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sidebars.ts b/sidebars.ts
index 0d4588276e..85b26221e7 100644
--- a/sidebars.ts
+++ b/sidebars.ts
@@ -73,7 +73,7 @@ const api: SidebarItemsConfig = [
"concepts/personal-access-token",
"guides/cors",
"guides/api-rest-pagination",
-{
+ {
type: "category",
label: "Rate limits",
link: {
From 347c431eada22f7c872369dd51f6aa816befcfec Mon Sep 17 00:00:00 2001
From: Andreas Bucksteeg
Date: Mon, 25 May 2026 15:18:12 +0200
Subject: [PATCH 22/37] chore: update bucket-to-endpoints.csv
---
src/lib/rate-limits/data/bucket-to-endpoints.csv | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/lib/rate-limits/data/bucket-to-endpoints.csv b/src/lib/rate-limits/data/bucket-to-endpoints.csv
index 556dd5c821..12364d9cda 100644
--- a/src/lib/rate-limits/data/bucket-to-endpoints.csv
+++ b/src/lib/rate-limits/data/bucket-to-endpoints.csv
@@ -86,6 +86,8 @@ PATCH,/admin/identities/{id},kratos-admin-low
DELETE,/admin/identities/{id},kratos-admin-low
DELETE,/admin/identities/{id}/credentials/{type},kratos-admin-low
DELETE,/admin/sessions/{id},kratos-admin-low
+OPTIONS,/admin/sessions,kratos-admin-low
+POST,/admin/sessions,kratos-admin-low
PUT,/scim/{name}/v2/Groups/{id},kratos-admin-low
PATCH,/scim/{name}/v2/Groups/{id},kratos-admin-low
DELETE,/scim/{name}/v2/Groups/{id},kratos-admin-low
From 45a9decb72082c4736f20b6df7a0e937986c40f8 Mon Sep 17 00:00:00 2001
From: Andreas Bucksteeg
Date: Tue, 26 May 2026 10:59:02 +0200
Subject: [PATCH 23/37] docs(rate-limits): align messaging with new rate limit
blog post
---
docs/guides/rate-limits-legacy.mdx | 34 ++++++++++++++++-----
docs/guides/rate-limits-new.mdx | 48 +++++++++++++++++++++++-------
docs/guides/rate-limits.mdx | 21 ++++++-------
3 files changed, 75 insertions(+), 28 deletions(-)
diff --git a/docs/guides/rate-limits-legacy.mdx b/docs/guides/rate-limits-legacy.mdx
index a73e7476a5..10fc554378 100644
--- a/docs/guides/rate-limits-legacy.mdx
+++ b/docs/guides/rate-limits-legacy.mdx
@@ -89,23 +89,43 @@ Your implementation must:
### Exponential backoff strategy
-Implement an exponential backoff strategy to proactively avoid hitting rate limits.
+When a request returns `429`, back off before retrying. Prefer the server's `x-ratelimit-reset` header when it's present, fall back
+to exponential backoff capped at 30 seconds otherwise, and always add jitter so concurrent clients don't retry in lockstep.
```jsx
async function callApiWithBackoff(request, maxRetries = 5) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(request)
- if (response.status === 429) {
- const delay = Math.pow(2, attempt) * 1000 // 1s, 2s, 4s, 8s, 16s
- await new Promise((resolve) => setTimeout(resolve, delay))
- continue
- }
- return response
+ if (response.status !== 429) return response
+
+ const resetAfter = response.headers.get("x-ratelimit-reset")
+ const baseDelay = resetAfter
+ ? parseInt(resetAfter, 10) * 1000
+ : Math.min(Math.pow(2, attempt) * 1000, 30000) // cap at 30s
+
+ const jitter = Math.random() * 1000
+ await new Promise((resolve) => setTimeout(resolve, baseDelay + jitter))
}
throw new Error("Max retries exceeded")
}
```
+You can also throttle proactively using `x-ratelimit-remaining` to slow down before hitting a 429:
+
+```jsx
+async function callApiWithThrottle(request) {
+ const response = await fetch(request)
+ const remaining = parseInt(response.headers.get("x-ratelimit-remaining"), 10)
+ const resetIn = parseInt(response.headers.get("x-ratelimit-reset"), 10)
+
+ if (remaining < 5 && resetIn > 0) {
+ const paceDelay = (resetIn * 1000) / Math.max(remaining, 1)
+ await new Promise((resolve) => setTimeout(resolve, paceDelay))
+ }
+ return response
+}
+```
+
Clients that repeatedly exceed rate limits without proper backoff may have their API access temporarily blocked. For high-volume
use cases that exceed your plan's limits, open a support ticket via the [Ory Console](https://console.ory.sh/support) or email
[support@ory.sh](mailto:support@ory.sh).
diff --git a/docs/guides/rate-limits-new.mdx b/docs/guides/rate-limits-new.mdx
index 269c730410..5f9d91d82f 100644
--- a/docs/guides/rate-limits-new.mdx
+++ b/docs/guides/rate-limits-new.mdx
@@ -9,7 +9,7 @@ sidebar_label: Rate limits - New
There is a new project rate limit policy, which applies to all new Ory Network customers and to existing customers after they've
been migrated. If you're an existing customer and haven't received a migration notice yet, see the
[rate limits - legacy](/docs/guides/rate-limits-legacy). See [Rate limits](/docs/guides/rate-limits) to learn about both policies
-and the migration plan. Enpoint-based rate limits have not changed.
+and the migration plan. Endpoint-based rate limits have not changed.
:::
@@ -58,30 +58,56 @@ these responses to maintain service quality.
Your implementation must:
- **Detect 429 responses**: Monitor for HTTP 429 status codes on all API calls.
-- **Implement exponential backoff**: When receiving a 429, pause and retry with increasing delays (for example: 1s, 2s, 4s, 8s).
-- **Respect rate limit headers**: Check `x-ratelimit-remaining` and `x-ratelimit-reset`, when available, to throttle requests
- proactively.
+- **Back off before retrying**: Prefer the server's `x-ratelimit-reset` header when available; fall back to exponential backoff
+ capped at 30 seconds. Always add jitter so concurrent clients don't retry in lockstep.
+- **Throttle proactively**: Check `x-ratelimit-remaining` and `x-ratelimit-reset` to slow down before you hit a 429.
- **Avoid retry storms**: Don't retry failed requests in a tight loop.
### Exponential backoff strategy
-Implement an exponential backoff strategy to proactively avoid hitting rate limits.
+When a request returns `429`, back off before retrying. Prefer the server's `x-ratelimit-reset` header when it's present, fall back
+to exponential backoff capped at 30 seconds otherwise, and always add jitter so concurrent clients don't retry in lockstep.
```jsx
async function callApiWithBackoff(request, maxRetries = 5) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(request)
- if (response.status === 429) {
- const delay = Math.pow(2, attempt) * 1000 // 1s, 2s, 4s, 8s, 16s
- await new Promise((resolve) => setTimeout(resolve, delay))
- continue
- }
- return response
+ if (response.status !== 429) return response
+
+ const resetAfter = response.headers.get("x-ratelimit-reset")
+ const baseDelay = resetAfter
+ ? parseInt(resetAfter, 10) * 1000
+ : Math.min(Math.pow(2, attempt) * 1000, 30000) // cap at 30s
+
+ const jitter = Math.random() * 1000
+ await new Promise((resolve) => setTimeout(resolve, baseDelay + jitter))
}
throw new Error("Max retries exceeded")
}
```
+You can also throttle proactively using `x-ratelimit-remaining` to slow down before hitting a 429:
+
+```jsx
+async function callApiWithThrottle(request) {
+ const response = await fetch(request)
+ const remaining = parseInt(response.headers.get("x-ratelimit-remaining"), 10)
+ const resetIn = parseInt(response.headers.get("x-ratelimit-reset"), 10)
+
+ if (remaining < 5 && resetIn > 0) {
+ const paceDelay = (resetIn * 1000) / Math.max(remaining, 1)
+ await new Promise((resolve) => setTimeout(resolve, paceDelay))
+ }
+ return response
+}
+```
+
Clients that repeatedly exceed rate limits without proper backoff may have their API access temporarily blocked. For high-volume
use cases that exceed your plan's limits, open a support ticket via the [Ory Console](https://console.ory.sh/support) or email
[support@ory.sh](mailto:support@ory.sh).
+
+## Load testing
+
+Load testing against the Ory Network requires prior written approval. Unauthorized tests will be detected and may result in
+temporary blocking. To request an approved window, open a support ticket via the [Ory Console](https://console.ory.sh/support) or
+email [support@ory.sh](mailto:support@ory.sh).
diff --git a/docs/guides/rate-limits.mdx b/docs/guides/rate-limits.mdx
index fcac97d77e..1aa4404347 100644
--- a/docs/guides/rate-limits.mdx
+++ b/docs/guides/rate-limits.mdx
@@ -10,11 +10,11 @@ customers are being migrated by subscription tier.
## Which rate limit system applies to you?
-| You are... | Your system |
-| -------------------------------------------------- | -------------------------------------------- |
-| A new customer (workspace created after [DATE]) | [Rate limits - new](./rate-limits-new) |
-| An existing customer — migration not yet completed | [Rate limits - legacy](./rate-limits-legacy) |
-| An existing customer — migration completed | [Rate limits - new](./rate-limits-new) |
+| You are... | Your system |
+| ------------------------------------------------------- | -------------------------------------------- |
+| A new customer (workspace created on or after June 1) | [Rate limits - new](./rate-limits-new) |
+| An existing customer, migration not yet completed | [Rate limits - legacy](./rate-limits-legacy) |
+| An existing customer, migration completed | [Rate limits - new](./rate-limits-new) |
:::tip
@@ -39,11 +39,12 @@ completes.
Migration schedule:
-| Phase | Plan | Date |
-| ----- | ------------------- | ------ |
-| 1 | Developer | [DATE] |
-| 2 | Production | [DATE] |
-| 3 | Growth & Enterprise | [DATE] |
+| Phase | Plan | Date |
+| ----- | --------------------------------------------- | ------------- |
+| 1 | New workspaces and existing Developer workspaces | Week of June 1 |
+| 2 | Existing Production workspaces | Week of June 8 |
+| 3 | Existing Growth workspaces | Week of June 15 |
+| 4 | Existing Enterprise workspaces | Week of June 22 |
The types of rate limits, for project-based and endpoint-based, remain the same in both rate limit policies.
From 3628e3a665c040d138fa555b23138df9a3ecbac6 Mon Sep 17 00:00:00 2001
From: Andreas Bucksteeg
Date: Tue, 26 May 2026 11:04:03 +0200
Subject: [PATCH 24/37] chore: run format
---
docs/guides/rate-limits-legacy.mdx | 8 +++-----
docs/guides/rate-limits-new.mdx | 8 +++-----
docs/guides/rate-limits.mdx | 14 +++++++-------
3 files changed, 13 insertions(+), 17 deletions(-)
diff --git a/docs/guides/rate-limits-legacy.mdx b/docs/guides/rate-limits-legacy.mdx
index 10fc554378..299f3b8a98 100644
--- a/docs/guides/rate-limits-legacy.mdx
+++ b/docs/guides/rate-limits-legacy.mdx
@@ -89,8 +89,8 @@ Your implementation must:
### Exponential backoff strategy
-When a request returns `429`, back off before retrying. Prefer the server's `x-ratelimit-reset` header when it's present, fall back
-to exponential backoff capped at 30 seconds otherwise, and always add jitter so concurrent clients don't retry in lockstep.
+When a request returns `429`, back off before retrying. Prefer the server's `x-ratelimit-reset` header when it's present, fall
+back to exponential backoff capped at 30 seconds otherwise, and always add jitter so concurrent clients don't retry in lockstep.
```jsx
async function callApiWithBackoff(request, maxRetries = 5) {
@@ -99,9 +99,7 @@ async function callApiWithBackoff(request, maxRetries = 5) {
if (response.status !== 429) return response
const resetAfter = response.headers.get("x-ratelimit-reset")
- const baseDelay = resetAfter
- ? parseInt(resetAfter, 10) * 1000
- : Math.min(Math.pow(2, attempt) * 1000, 30000) // cap at 30s
+ const baseDelay = resetAfter ? parseInt(resetAfter, 10) * 1000 : Math.min(Math.pow(2, attempt) * 1000, 30000) // cap at 30s
const jitter = Math.random() * 1000
await new Promise((resolve) => setTimeout(resolve, baseDelay + jitter))
diff --git a/docs/guides/rate-limits-new.mdx b/docs/guides/rate-limits-new.mdx
index 5f9d91d82f..f6384596b9 100644
--- a/docs/guides/rate-limits-new.mdx
+++ b/docs/guides/rate-limits-new.mdx
@@ -65,8 +65,8 @@ Your implementation must:
### Exponential backoff strategy
-When a request returns `429`, back off before retrying. Prefer the server's `x-ratelimit-reset` header when it's present, fall back
-to exponential backoff capped at 30 seconds otherwise, and always add jitter so concurrent clients don't retry in lockstep.
+When a request returns `429`, back off before retrying. Prefer the server's `x-ratelimit-reset` header when it's present, fall
+back to exponential backoff capped at 30 seconds otherwise, and always add jitter so concurrent clients don't retry in lockstep.
```jsx
async function callApiWithBackoff(request, maxRetries = 5) {
@@ -75,9 +75,7 @@ async function callApiWithBackoff(request, maxRetries = 5) {
if (response.status !== 429) return response
const resetAfter = response.headers.get("x-ratelimit-reset")
- const baseDelay = resetAfter
- ? parseInt(resetAfter, 10) * 1000
- : Math.min(Math.pow(2, attempt) * 1000, 30000) // cap at 30s
+ const baseDelay = resetAfter ? parseInt(resetAfter, 10) * 1000 : Math.min(Math.pow(2, attempt) * 1000, 30000) // cap at 30s
const jitter = Math.random() * 1000
await new Promise((resolve) => setTimeout(resolve, baseDelay + jitter))
diff --git a/docs/guides/rate-limits.mdx b/docs/guides/rate-limits.mdx
index 1aa4404347..285013f2a5 100644
--- a/docs/guides/rate-limits.mdx
+++ b/docs/guides/rate-limits.mdx
@@ -10,11 +10,11 @@ customers are being migrated by subscription tier.
## Which rate limit system applies to you?
-| You are... | Your system |
-| ------------------------------------------------------- | -------------------------------------------- |
-| A new customer (workspace created on or after June 1) | [Rate limits - new](./rate-limits-new) |
-| An existing customer, migration not yet completed | [Rate limits - legacy](./rate-limits-legacy) |
-| An existing customer, migration completed | [Rate limits - new](./rate-limits-new) |
+| You are... | Your system |
+| ----------------------------------------------------- | -------------------------------------------- |
+| A new customer (workspace created on or after June 1) | [Rate limits - new](./rate-limits-new) |
+| An existing customer, migration not yet completed | [Rate limits - legacy](./rate-limits-legacy) |
+| An existing customer, migration completed | [Rate limits - new](./rate-limits-new) |
:::tip
@@ -39,8 +39,8 @@ completes.
Migration schedule:
-| Phase | Plan | Date |
-| ----- | --------------------------------------------- | ------------- |
+| Phase | Plan | Date |
+| ----- | ------------------------------------------------ | --------------- |
| 1 | New workspaces and existing Developer workspaces | Week of June 1 |
| 2 | Existing Production workspaces | Week of June 8 |
| 3 | Existing Growth workspaces | Week of June 15 |
From 3a1c7e75b030dcd716a723e918f7fc45987451d6 Mon Sep 17 00:00:00 2001
From: Andreas Bucksteeg
Date: Tue, 26 May 2026 20:20:34 +0200
Subject: [PATCH 25/37] docs(rate-limits): fix keto bucket example and drop
self-referencing callout
---
docs/guides/rate-limits-project.mdx | 12 ++----------
1 file changed, 2 insertions(+), 10 deletions(-)
diff --git a/docs/guides/rate-limits-project.mdx b/docs/guides/rate-limits-project.mdx
index 63262d41e0..713170d190 100644
--- a/docs/guides/rate-limits-project.mdx
+++ b/docs/guides/rate-limits-project.mdx
@@ -26,8 +26,8 @@ Buckets follow a `{service}-{access}-{threshold}` naming pattern. For example:
:::info
-A bucket counter is shared across all endpoints in the same bucket. For example, `POST /admin/relation-tuples` and
-`DELETE /admin/relation-tuples` both belong to `keto-admin-high`, so every call to either endpoint counts against the same limit.
+A bucket counter is shared across all endpoints in the same bucket. For example, `PUT /admin/relation-tuples` and
+`DELETE /admin/relation-tuples` both belong to `keto-admin-low`, so every call to either endpoint counts against the same limit.
Plan your request volumes accordingly.
:::
@@ -46,14 +46,6 @@ In the **Project rate limit table** below:
3. To search by API path, enter the API path into the **Search API path** box. The endpoint appears highlighted. Look to see which
bucket it belongs to for its rate limit.
-:::info
-
-Project rate limits use a bucket system to group endpoints and apply thresholds. Understanding how buckets work will help you
-understand the project rate limit table below. See [Project rate limits](./rate-limits-project) to learn how rate limits are
-applied per bucket.
-
-:::
-
### Project rate limit table
From b5d56db5b24e7a445f47ac7fc2bfa5cb1fdf395f Mon Sep 17 00:00:00 2001
From: Wassim Bougarfa <12980387+wassimoo@users.noreply.github.com>
Date: Wed, 27 May 2026 13:03:04 +0200
Subject: [PATCH 26/37] chore: remove trailing comments
---
sidebars.ts | 2 --
src/sidebar-old.ts | 2 --
2 files changed, 4 deletions(-)
diff --git a/sidebars.ts b/sidebars.ts
index 85b26221e7..478502f930 100644
--- a/sidebars.ts
+++ b/sidebars.ts
@@ -81,10 +81,8 @@ const api: SidebarItemsConfig = [
id: "guides/rate-limits",
},
items: [
- // ← restored items array
"guides/rate-limits-legacy",
{
- // ← New rate limits as nested category
type: "category",
label: "Rate limits - New",
link: {
diff --git a/src/sidebar-old.ts b/src/sidebar-old.ts
index e7cda922a3..7fdd9ac199 100644
--- a/src/sidebar-old.ts
+++ b/src/sidebar-old.ts
@@ -98,10 +98,8 @@ const api: SidebarItemsConfig = [
id: "guides/rate-limits",
},
items: [
- // ← restored items array
"guides/rate-limits-legacy",
{
- // ← New rate limits as nested category
type: "category",
label: "Rate limits - New",
link: {
From 2a58d02d71138a1cb3525113bb1f2db8eeb2df00 Mon Sep 17 00:00:00 2001
From: unatasha8
Date: Fri, 29 May 2026 16:50:26 -0700
Subject: [PATCH 27/37] docs: added load-performance-testing to sidebar
---
sidebars.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/sidebars.ts b/sidebars.ts
index 478502f930..34e4a858a3 100644
--- a/sidebars.ts
+++ b/sidebars.ts
@@ -96,6 +96,7 @@ const api: SidebarItemsConfig = [
},
],
},
+ "guides/load-performance-testing",
"guides/ip-allowlist",
"api/eventual-consistency",
"kratos/reference/jsonnet",
From a898ce09c31218c843187148892eb26bd7b6d428 Mon Sep 17 00:00:00 2001
From: unatasha8
Date: Fri, 29 May 2026 17:11:53 -0700
Subject: [PATCH 28/37] docs: removing sidebar-old.ts
---
sidebars-network.ts | 2 +
src/sidebar-old.ts | 1379 -------------------------------------------
2 files changed, 2 insertions(+), 1379 deletions(-)
delete mode 100644 src/sidebar-old.ts
diff --git a/sidebars-network.ts b/sidebars-network.ts
index 56eb11aba6..f4aeb95e07 100644
--- a/sidebars-network.ts
+++ b/sidebars-network.ts
@@ -201,6 +201,7 @@ const networkSidebar = [
"kratos/passwordless/one-time-code",
"kratos/passwordless/passkeys",
"kratos/passwordless/passkeys-mobile",
+ "kratos/passwordless/deviceauthn",
"kratos/organizations/organizations",
"kratos/emails-sms/custom-email-templates",
],
@@ -246,6 +247,7 @@ const networkSidebar = [
],
},
"kratos/social-signin/data-mapping",
+ "kratos/social-signin/upstream-mfa",
"kratos/social-signin/account-linking",
"kratos/social-signin/get-tokens",
"identities/sign-in/social-sign-in/redirect-url",
diff --git a/src/sidebar-old.ts b/src/sidebar-old.ts
deleted file mode 100644
index 7fdd9ac199..0000000000
--- a/src/sidebar-old.ts
+++ /dev/null
@@ -1,1379 +0,0 @@
-// Copyright © 2026 Ory Corp
-// SPDX-License-Identifier: Apache-2.0
-
-import {
- SidebarItem,
- SidebarItemConfig,
-} from "@docusaurus/plugin-content-docs/src/sidebars/types"
-
-type SidebarItemsConfig = SidebarItemConfig[]
-
-const homeLink: SidebarItem = {
- type: "link",
- href: "/welcome",
- className: "all-docs-link",
- label: "Go to Start Page",
-}
-
-const polisLink: SidebarItem = {
- type: "link",
- href: "/polis",
- className: "all-docs-link",
- label: "Go to Polis Page",
-}
-
-const oidcSSO: SidebarItemConfig = {
- type: "category",
- label: "OpenID Connect SSO",
- link: {
- type: "doc",
- id: "guides/oauth2-openid-connect",
- },
- items: [
- "kratos/social-signin/overview",
- {
- type: "category",
- label: "Social Sign-in Providers",
- items: [
- "kratos/social-signin/generic",
- "kratos/social-signin/ory",
- "kratos/social-signin/google",
- "kratos/social-signin/facebook",
- "kratos/social-signin/microsoft",
- "kratos/social-signin/github",
- "kratos/social-signin/apple",
- "kratos/social-signin/gitlab",
- "kratos/social-signin/auth0",
- "kratos/social-signin/salesforce",
- "kratos/social-signin/slack",
- "kratos/social-signin/spotify",
- "kratos/social-signin/discord",
- "kratos/social-signin/twitch",
- "kratos/social-signin/netid",
- "kratos/social-signin/yandex",
- "kratos/social-signin/vk",
- "kratos/social-signin/dingtalk",
- "kratos/social-signin/lark",
- "kratos/social-signin/patreon",
- "kratos/social-signin/linkedin",
- "kratos/social-signin/x-twitter",
- "kratos/social-signin/line",
- "kratos/social-signin/amazon",
- "kratos/social-signin/uaepass",
- ],
- },
- "kratos/social-signin/data-mapping",
- "kratos/social-signin/upstream-mfa",
- "kratos/social-signin/account-linking",
- "kratos/social-signin/get-tokens",
- "identities/sign-in/social-sign-in/redirect-url",
- "kratos/social-signin/native-apps",
- "kratos/social-signin/oidc-pkce",
- "kratos/social-signin/fedcm",
- ],
-}
-
-const api: SidebarItemsConfig = [
- homeLink,
- "reference/api",
- // "ecosystem/api-design",
- {
- type: "category",
- label: "Operations",
- collapsed: false,
- collapsible: false,
- link: {
- type: "generated-index",
- slug: "/category/operations-reference",
- },
- items: [
- "concepts/personal-access-token",
- "guides/cors",
- "guides/api-rest-pagination",
- {
- type: "category",
- label: "Rate limits",
- link: {
- type: "doc",
- id: "guides/rate-limits",
- },
- items: [
- "guides/rate-limits-legacy",
- {
- type: "category",
- label: "Rate limits - New",
- link: {
- type: "doc",
- id: "guides/rate-limits-new",
- },
- items: [
- "guides/rate-limits-project",
- "guides/rate-limits-endpoint",
- ],
- },
- ],
- },
- "guides/load-performance-testing",
- "guides/ip-allowlist",
- "api/eventual-consistency",
- "kratos/reference/jsonnet",
- "guides/user-impersonation",
- ],
- },
-]
-
-const polisApi: SidebarItemsConfig = [polisLink, "polis/reference/api"]
-
-const sdk: SidebarItemsConfig = [
- homeLink,
- "sdk",
- {
- type: "category",
- label: "Identity SDKs",
- collapsed: false,
- collapsible: false,
- link: {
- type: "doc",
- id: "kratos/sdk/overview",
- },
- items: ["kratos/self-hosted/go"],
- },
- {
- type: "category",
- label: "OAuth2 SDKs",
- collapsed: false,
- collapsible: false,
- link: {
- type: "doc",
- id: "hydra/sdk/overview",
- },
- items: ["hydra/self-hosted/go", "hydra/self-hosted/js"],
- },
- {
- type: "category",
- label: "Permission SDKs",
- collapsed: false,
- collapsible: false,
- link: {
- type: "doc",
- id: "keto/sdk/overview",
- },
- items: ["keto/self-hosted/go", "keto/sdk/python"],
- },
-]
-
-const cli: SidebarItemsConfig = [
- homeLink,
- {
- type: "category",
- label: "Ory CLI reference",
- collapsed: false,
- collapsible: false,
- link: {
- type: "generated-index",
- },
- items: [
- "guides/cli/installation",
- "guides/cli/cli-basics",
- "guides/cli/identity-cli",
- "guides/cli/oauth2-cli",
- "guides/cli/configure-permission-service",
- "guides/cli/proxy-and-tunnel",
- "guides/cli/config-with-cli",
- {
- type: "category",
- label: "CLI commands reference",
- link: {
- type: "generated-index",
- },
- items: [
- {
- type: "autogenerated",
- dirName: "cli",
- },
- ],
- },
- ],
- },
-]
-
-const quickstart: SidebarItemsConfig = [
- "welcome",
- "intro",
- "getting-started/local-development",
- "ecosystem/mcp",
- {
- type: "category",
- label: "Quickstart",
- collapsed: false,
- collapsible: false,
- link: {
- type: "doc",
- id: "getting-started/overview",
- },
- items: [
- {
- type: "autogenerated",
- dirName: "getting-started/integrate-auth",
- },
- ],
- },
- {
- type: "category",
- label: "Migrate to Ory",
- collapsed: false,
- collapsible: false,
- items: [
- {
- type: "category",
- label: "Migrate to Ory Network",
- collapsed: true,
- collapsible: true,
- items: [
- {
- type: "category",
- label: "Phase 1: Plan & prepare",
- collapsed: true,
- collapsible: true,
- items: [
- "migrate-to-ory/migrate/index",
- "migrate-to-ory/migrate/map-to-orycap",
- "migrate-to-ory/migrate/migrate-strategies",
- //"migrate-to-ory/migrate/faq-migrate",
- ],
- },
- {
- type: "category",
- label: "Phase 2: Migrate",
- collapsed: true,
- collapsible: true,
- items: [
- "migrate-to-ory/migrate/create-project",
- "migrate-to-ory/migrate/design-id-schema",
- "migrate-to-ory/migrate/integrate-frontend",
- "migrate-to-ory/migrate/integrate-backend",
- "migrate-to-ory/migrate/migrate-identities",
- ],
- },
- {
- type: "category",
- label: "Phase 3: Test & validate",
- collapsed: true,
- collapsible: true,
- items: ["migrate-to-ory/migrate/test-validate"],
- },
- {
- type: "category",
- label: "Phase 4: Go live",
- collapsed: true,
- collapsible: true,
- items: ["migrate-to-ory/migrate/go-live"],
- },
- ],
- },
- "migrate-to-ory/auth0",
- ],
- },
-]
-
-const troubleshooting: SidebarItemsConfig = [
- homeLink,
- {
- type: "category",
- label: "Troubleshooting",
- collapsible: false,
- collapsed: false,
- link: {
- type: "generated-index",
- slug: "/category/troubleshooting",
- },
- items: [
- {
- type: "autogenerated",
- dirName: "troubleshooting",
- },
- "oauth2-oidc/identity-provider-integration-settings",
- "guides/upgrade/sdk-v1",
- "hydra/debug",
- "hydra/debug/logout",
- "hydra/debug/token-endpoint-auth-method",
- ],
- },
-]
-
-const operations: SidebarItemsConfig = [
- homeLink,
- {
- type: "category",
- label: "Operations",
- link: {
- type: "doc",
- id: "guides/operations",
- },
- collapsed: false,
- collapsible: false,
- items: [
- "guides/workspaces",
- "console/single-sign-on",
- "console/roles-and-permissions",
- "guides/custom-domains",
- "console/usage-billing",
- "guides/manage-project-via-api",
- "console/change-owner",
- "guides/gitops",
- "actions/live-events",
- ],
- },
-]
-
-const kratos: SidebarItemsConfig = [
- homeLink,
- "identities/index",
- {
- type: "category",
- label: "Get Started",
- collapsed: true,
- link: {
- type: "doc",
- id: "identities/get-started/index",
- },
- items: [
- "identities/get-started/setup",
- "identities/get-started/sign-up",
- "identities/get-started/sign-in",
- "identities/get-started/sign-out",
- "identities/get-started/session-management",
- "identities/get-started/account-recovery",
- "identities/get-started/mfa",
- "identities/get-started/social-sign-in",
- "identities/get-started/passwordless",
- ],
- },
- {
- type: "category",
- label: "Concepts",
- collapsed: false,
- collapsible: false,
- link: {
- type: "generated-index",
- },
- items: [
- "security-model",
- "identities/native-browser",
- "concepts/redirects",
- "kratos/hooks/configure-hooks",
- ],
- },
- {
- type: "category",
- label: "Guides",
- collapsed: false,
- collapsible: false,
- link: {
- type: "generated-index",
- },
- items: [
- {
- type: "category",
- label: "Authentication",
- link: {
- type: "generated-index",
- slug: "guides/authentication",
- },
- items: [
- "kratos/concepts/credentials",
- "kratos/concepts/credentials/username-email-password",
- "kratos/passwordless/passwordless",
- "kratos/passwordless/one-time-code",
- "kratos/passwordless/passkeys",
- "kratos/passwordless/passkeys-mobile",
- "kratos/passwordless/deviceauthn",
- "kratos/organizations/organizations",
- "kratos/emails-sms/custom-email-templates",
- ],
- },
- oidcSSO,
- {
- type: "category",
- label: "Flows",
- link: {
- type: "doc",
- id: "kratos/self-service",
- },
- items: [
- "kratos/concepts/browser-redirect-flow-completion",
- "kratos/self-service/flows/user-registration",
- "kratos/self-service/flows/user-login",
- "kratos/self-service/flows/user-logout",
- "kratos/self-service/flows/user-settings",
- "kratos/self-service/flows/verify-email-account-activation",
- "kratos/self-service/flows/CAPTCHA",
- "kratos/self-service/flows/account-recovery-password-reset",
- "kratos/self-service/flows/user-facing-errors",
- ],
- },
- {
- type: "category",
- label: "Session",
- link: {
- type: "doc",
- id: "kratos/session-management/overview",
- },
- items: [
- "kratos/session-management/session-management",
- "identities/sign-in/check-session",
- "kratos/session-management/session-lifespan",
- "kratos/session-management/refresh-extend-sessions",
- "kratos/session-management/revoke-sessions-hook",
- "identities/session-to-jwt-cors",
- "concepts/cache",
- ],
- },
- {
- type: "category",
- label: "Multi-factor authentication",
- link: {
- type: "doc",
- id: "kratos/mfa/overview",
- },
- items: [
- "kratos/mfa/lookup-secrets",
- "kratos/mfa/totp",
- "kratos/mfa/webauthn-fido-yubikey",
- "kratos/mfa/mfa-via-sms",
- "kratos/mfa/step-up-authentication",
- ],
- },
- {
- type: "category",
- label: "Emails and SMS",
- collapsed: true,
- collapsible: true,
- link: {
- type: "doc",
- id: "guides/email-sms",
- },
- items: [
- "kratos/emails-sms/sending-emails-smtp",
- "kratos/emails-sms/sending-sms",
- ],
- },
- {
- type: "category",
- label: "Ory Actions",
- link: {
- type: "doc",
- id: "guides/integrate-with-ory-cloud-through-webhooks",
- },
- items: [
- {
- type: "category",
- label: "Identity management",
- items: [
- "identities/sign-in/actions",
- "actions/revoke-active-sessions",
- "actions/session",
- "actions/require-verified-address",
- {
- type: "category",
- label: "Integrations",
- items: [
- "actions/integrations/hubspot",
- "actions/integrations/mailchimp",
- "actions/integrations/segment",
- ],
- },
- ],
- },
- ],
- },
- {
- type: "category",
- label: "Search",
- items: [
- "kratos/manage-identities/search/identity-search-console",
- "kratos/manage-identities/search/identity-search-api",
- ],
- },
- {
- type: "category",
- label: "Identity management",
- link: {
- type: "doc",
- id: "kratos/manage-identities/overview",
- },
- items: [
- "kratos/manage-identities/create-users-identities",
- "kratos/manage-identities/import-user-accounts-identities",
- "identities/model/identity-state",
- "kratos/manage-identities/invite-users",
- "kratos/manage-identities/account-recovery",
- "kratos/manage-identities/export-user-accounts-identities",
-
- {
- type: "category",
- label: "SCIM",
- link: {
- type: "doc",
- id: "kratos/manage-identities/scim",
- },
- items: [
- "kratos/manage-identities/scim/ms-entra",
- "kratos/manage-identities/scim/okta",
- "kratos/manage-identities/scim/google-workspace",
- ],
- },
-
- "kratos/manage-identities/external-id",
- ],
- },
- {
- type: "category",
- label: "Identity schema",
- link: {
- type: "doc",
- id: "kratos/manage-identities/identity-schema",
- },
- items: [
- "kratos/manage-identities/managing-users-identities-metadata",
- "identities/model/manage-identity-schema",
- "kratos/manage-identities/customize-identity-schema",
- "identities/model/identity-schema-selection",
- "kratos/manage-identities/best-practices",
- ],
- },
-
- {
- type: "category",
- label: "User interface",
- link: {
- type: "doc",
- id: "kratos/bring-your-own-ui/custom-ui-overview",
- },
- items: [
- "account-experience/index",
- "kratos/bring-your-own-ui/configure-ory-to-use-your-ui",
- "kratos/bring-your-own-ui/custom-vs-built-in-ui",
- {
- type: "doc",
- id: "elements/index",
- label: "Ory Elements",
- className: "external-link",
- },
- {
- type: "category",
- label: "Build your own UI",
- link: {
- type: "doc",
- id: "getting-started/custom-ui",
- },
- items: [
- "kratos/bring-your-own-ui/custom-ui-basic-integration",
- "kratos/bring-your-own-ui/custom-ui-advanced-integration",
- "kratos/concepts/ui-user-interface",
- {
- type: "doc",
- id: "elements/index",
- label: "Ory Elements",
- className: "external-link",
- },
- ],
- },
- ],
- },
- ],
- },
- {
- type: "category",
- label: "Configuration",
- collapsed: false,
- collapsible: false,
- items: [
- "identities/sign-in/two-step-registration",
- "identities/sign-in/identifier-first-authentication",
- "identities/sign-in/login-hint",
- "identities/sign-in/actions",
- "identities/sign-in/code-submission-limit",
- ],
- },
- {
- type: "category",
- label: "Self-Hosted",
- collapsed: false,
- collapsible: false,
- link: {
- type: "doc",
- id: "kratos/quickstart",
- },
- items: [
- "kratos/install",
- "kratos/quickstart",
- {
- type: "category",
- label: "Configuration",
- items: [
- "kratos/configuring",
- "kratos/guides/configuring-cookies",
- "kratos/guides/multi-domain-cookies",
- "self-hosted/kratos/configuration/password",
- "kratos/self-hosted/mfa",
- "kratos/guides/setting-up-cors",
- "self-hosted/kratos/configuration/oidc",
- "kratos/guides/setting-up-password-hashing-parameters",
- "kratos/guides/select-cipher-algorithm",
- "kratos/self-hosted/email-http",
- "kratos/reference/configuration-editor",
- ],
- },
- {
- type: "category",
- label: "Guides",
- items: [
- "kratos/guides/docker",
- "kratos/guides/deploy-kratos-example",
- "kratos/guides/upgrade",
- "kratos/guides/production",
- "kratos/guides/multi-tenancy-multitenant",
- "self-hosted/operations/scalability",
- "kratos/self-hosted/mail-courier-templates",
- "kratos/guides/tracing",
- "kratos/guides/zero-trust-iap-proxy-identity-access-proxy",
- "kratos/guides/https-tls",
- "kratos/guides/hosting-own-have-i-been-pwned-api",
- "kratos/guides/secret-key-rotation",
- {
- type: "category",
- label: "Troubleshooting",
- items: [
- {
- type: "autogenerated",
- dirName: "kratos/debug",
- },
- ],
- },
- ],
- },
- {
- type: "category",
- label: "Reference",
- items: [
- "kratos/reference/api",
- {
- "Command Line Interface (CLI)": [
- {
- type: "autogenerated",
- dirName: "kratos/cli",
- },
- ],
- },
- {
- SDK: ["kratos/sdk/overview", "kratos/self-hosted/go"],
- },
- "kratos/reference/configuration",
- "kratos/reference/json-schema-json-paths",
- "kratos/reference/html-forms",
- ],
- },
- ],
- },
-]
-
-const hydra: SidebarItemsConfig = [
- homeLink,
- "oauth2-oidc/index",
- {
- type: "category",
- label: "Start",
- collapsed: false,
- collapsible: false,
- link: {
- type: "doc",
- id: "getting-started/ory-network-oauth2",
- },
- items: [
- "getting-started/oauth2-openid/expressjs",
- "hydra/guides/using-oauth2",
- ],
- },
- {
- type: "category",
- label: "Concepts",
- collapsed: false,
- collapsible: false,
- link: {
- type: "doc",
- id: "oauth2-oidc/index",
- },
- items: [
- "oauth2-oidc/overview/oauth2-concepts",
- "oauth2-oidc/overview/oidc-concepts",
- "hydra/concepts/before-oauth2",
- "hydra/security-architecture",
- ],
- },
-
- {
- type: "category",
- label: "Guides",
- collapsed: false,
- collapsible: false,
- link: {
- type: "doc",
- id: "hydra/guides/oauth2-token-introspection",
- },
- items: [
- {
- type: "category",
- label: "Flows",
- link: {
- type: "doc",
- id: "oauth2-oidc/authorization-code-flow",
- },
- items: [
- "oauth2-oidc/authorization-code-flow",
- "oauth2-oidc/client-credentials",
- "oauth2-oidc/device-authorization",
- "oauth2-oidc/resource-owner-password-grant",
- "oauth2-oidc/refresh-token-grant",
- "oauth2-oidc/userinfo-oidc",
- "oauth2-oidc/oidc-logout",
- "oauth2-oidc/wellknown-endpoint-discovery",
- ],
- },
- {
- type: "category",
- label: "Token management",
- link: {
- type: "generated-index",
- slug: "guides/token-management",
- },
- items: [
- "hydra/guides/oauth2-token-introspection",
- "oauth2-oidc/revoke-consent",
- "oauth2-oidc/skip-consent",
- "oauth2-oidc/jwt-access-token",
- "hydra/guides/audiences",
- "hydra/guides/jwt",
- "hydra/guides/client-token-expiration",
- "hydra/guides/graceful-token-refresh",
- "oauth2-oidc/claims-scope",
- ],
- },
- {
- type: "category",
- label: "Ory Actions",
- items: ["hydra/guides/claims-at-refresh"],
- },
- {
- type: "category",
- label: "Client management",
- items: [
- "hydra/guides/oauth2-clients",
- "hydra/jwks",
- "hydra/guides/openid",
- "oauth2-oidc/issuer-url",
- ],
- },
- {
- type: "category",
- label: "User Interface",
- link: {
- type: "doc",
- id: "hydra/guides/custom-ui-oauth2",
- },
- items: ["oauth2-oidc/custom-login-consent/flow", "hydra/guides/logout"],
- },
- ],
- },
-
- {
- type: "category",
- label: "Self-Hosted",
- collapsed: false,
- collapsible: false,
- items: [
- "hydra/self-hosted/install",
- "hydra/self-hosted/quickstart",
-
- {
- type: "category",
- label: "Configuration",
- items: [
- "hydra/reference/configuration",
- "hydra/reference/configuration-editor",
- "hydra/self-hosted/configure-deploy",
- "hydra/self-hosted/dependencies-environment",
- "hydra/self-hosted/production",
- "hydra/self-hosted/hsm-support",
- "self-hosted/operations/scalability",
- "hydra/self-hosted/merge-multiple-db-secrets",
- "hydra/self-hosted/gitlab",
- "hydra/self-hosted/secrets-key-rotation",
- "hydra/self-hosted/kubernetes-helm-chart",
- "hydra/self-hosted/ssl-https-tls",
- "self-hosted/operations/tracing",
- "hydra/guides/cookies",
- "hydra/guides/cors",
- "self-hosted/hydra/debug/csrf",
- ],
- },
- {
- type: "category",
- label: "Guides",
- items: [
- "hydra/self-hosted/deploy-hydra-example",
- "hydra/self-hosted/upgrade",
- ],
- },
- {
- type: "category",
- label: "Reference",
- items: [
- "hydra/reference/api",
- {
- "Command Line Interface (CLI)": [
- {
- type: "autogenerated",
- dirName: "hydra/cli",
- },
- ],
- },
- {
- SDK: [
- "hydra/sdk/overview",
- "hydra/self-hosted/go",
- "hydra/self-hosted/js",
- ],
- },
- ],
- },
- ],
- },
-]
-
-const keto: SidebarItemsConfig = [
- homeLink,
- "keto/index",
- {
- type: "category",
- label: "Start",
- collapsed: false,
- collapsible: false,
- link: {
- type: "doc",
- id: "guides/permissions/overview",
- },
- items: ["keto/quickstart", "keto/examples/olymp-file-sharing"],
- },
- {
- type: "category",
- label: "Concepts",
- collapsed: false,
- collapsible: false,
- link: {
- type: "doc",
- id: "keto/index",
- },
- items: [
- "keto/guides/rbac",
- {
- type: "autogenerated",
- dirName: "keto/concepts",
- },
- "keto/reference/ory-permission-language",
- ],
- },
- {
- type: "category",
- label: "Guides",
- collapsed: false,
- collapsible: false,
- items: [
- "keto/guides/simple-access-check-guide",
- "keto/modeling/create-permission-model",
- "keto/guides/list-api-display-objects",
- "keto/guides/expand-api-display-who-has-access",
- ],
- },
- {
- type: "category",
- label: "Self-Hosted",
- collapsed: false,
- collapsible: false,
- items: [
- "keto/install",
- "keto/quickstart",
- {
- type: "category",
- label: "Configuration",
- items: [
- "keto/reference/configuration",
- "keto/reference/configuration-editor",
- ],
- },
- {
- type: "category",
- label: "Guides",
- items: [
- "keto/guides/production",
- "keto/guides/v0.7-migration",
- "keto/guides/migrating-legacy-policies",
- "keto/guides/upgrade",
- ],
- },
- {
- Reference: [
- "keto/reference/rest-api",
- "keto/reference/proto-api",
- {
- "Command Line Interface (CLI)": [
- {
- type: "autogenerated",
- dirName: "keto/cli",
- },
- ],
- },
- {
- SDK: ["keto/sdk/overview", "keto/self-hosted/go"],
- },
- ],
- },
- ],
- },
-]
-
-const polis: SidebarItemsConfig = [
- homeLink,
- "polis/index",
- {
- type: "category",
- label: "Self-Hosted",
- collapsed: false,
- collapsible: false,
- items: [
- "polis/install",
- "polis/quickstart",
- "polis/reference/api",
- {
- type: "category",
- label: "Enterprise SSO",
- collapsed: false,
- collapsible: false,
- link: {
- type: "doc",
- id: "polis/saml-federation/index",
- },
- items: [
- {
- type: "category",
- label: "Concepts",
- link: {
- type: "doc",
- id: "polis/sso-flow/index",
- },
- items: [
- "polis/sso-flow/index",
- "polis/sso-flow/example-flow",
- "polis/security",
- ],
- },
- {
- type: "category",
- label: "Configuration",
- items: [
- "polis/deploy/env-variables",
- "polis/guides/configuring-saml-sso",
- "polis/guides/login-with-saml-sso",
- "polis/deploy/pre-loaded-connections",
- ],
- },
- {
- type: "category",
- label: "Guides",
- link: {
- type: "doc",
- id: "polis/guides/service",
- },
- items: [
- "polis/guides/service",
- "polis/guides/npm-library",
- "polis/upgrade",
- "polis/guides/examples",
- "polis/sbom",
- "polis/container-signing",
- "polis/events",
- "polis/observability",
- {
- type: "category",
- label: "Frameworks",
- items: [
- {
- type: "autogenerated",
- dirName: "polis/guides/frameworks",
- },
- ],
- },
- {
- type: "category",
- label: "Deployment",
- items: [
- {
- type: "autogenerated",
- dirName: "polis/guides/deployment",
- },
- ],
- },
- ],
- },
- {
- type: "category",
- label: "SAML SSO Providers",
- link: {
- type: "doc",
- id: "polis/sso-providers/index",
- },
- items: [
- {
- type: "autogenerated",
- dirName: "polis/sso-providers",
- },
- ],
- },
- ],
- },
- {
- type: "category",
- label: "Directory Sync",
- collapsed: false,
- collapsible: false,
- link: {
- type: "doc",
- id: "polis/directory-sync/index",
- },
- items: [
- "polis/directory-sync/quickstart",
- "polis/directory-sync/api-reference",
- {
- type: "category",
- label: "Guides",
- collapsed: true,
- link: {
- type: "generated-index",
- slug: "polis/directory-sync/guides",
- },
- items: [
- "polis/directory-sync/webhooks",
- "polis/directory-sync/events",
- "polis/directory-sync/observability",
- "polis/directory-sync/examples",
- "polis/directory-sync/faq",
- {
- type: "category",
- label: "Directory providers",
- link: {
- type: "generated-index",
- slug: "polis/directory-sync/providers",
- },
- items: [
- {
- type: "autogenerated",
- dirName: "polis/directory-sync/providers",
- },
- ],
- },
- {
- type: "category",
- label: "Frameworks",
- items: [
- {
- type: "autogenerated",
- dirName: "polis/directory-sync/guides",
- },
- ],
- },
- ],
- },
- ],
- },
- {
- type: "category",
- label: "Admin Portal",
- collapsed: false,
- collapsible: false,
- link: {
- type: "doc",
- id: "polis/admin-portal/index",
- },
- items: [
- {
- type: "category",
- label: "Guides",
- collapsed: true,
- link: {
- type: "generated-index",
- slug: "polis/admin-portal/guides",
- },
- items: [
- "polis/admin-portal/enterprise-sso",
- "polis/admin-portal/setup-links-enterprise-sso",
- "polis/admin-portal/directory-sync",
- "polis/admin-portal/setup-links-directory-sync",
- ],
- },
- ],
- },
- ],
- },
-]
-
-const oathkeeper: SidebarItemsConfig = [
- homeLink,
- "oathkeeper/index",
- "oathkeeper/install",
- "oathkeeper/reference/api",
- {
- type: "category",
- label: "Concepts",
- collapsed: false,
- collapsible: false,
- items: [
- "oathkeeper/api-access-rules",
- {
- type: "category",
-
- label: "Handlers",
- items: [
- "oathkeeper/pipeline",
- "oathkeeper/pipeline/authn",
- "oathkeeper/pipeline/authz",
- "oathkeeper/pipeline/mutator",
- "oathkeeper/pipeline/error",
- ],
- },
- "oathkeeper/grpc-middleware",
- ],
- },
- {
- type: "category",
- label: "Guides",
- collapsed: false,
- collapsible: false,
- items: [
- "oathkeeper/configure-deploy",
- "oathkeeper/guides/proxy-websockets",
- "oathkeeper/guides/traefik-proxy-integration",
- "oathkeeper/guides/upgrade",
- ],
- },
- {
- type: "category",
- label: "Reference",
- collapsed: false,
- collapsible: false,
- items: [
- "oathkeeper/reference/configuration",
- "oathkeeper/reference/configuration-editor",
- {
- "Command Line Interface (CLI)": [
- {
- type: "autogenerated",
- dirName: "oathkeeper/cli",
- },
- ],
- },
- "oathkeeper/sdk",
- ],
- },
-]
-
-const opensource: SidebarItemsConfig = [
- homeLink,
- // "ecosystem/projects",
- {
- type: "category",
- label: "Open source",
- items: [
- "open-source",
- // "ecosystem/community",
- // "ecosystem/contributing",
- // "open-source/commitment",
- // "ecosystem/software-architecture-philosophy",
- {
- type: "category",
- label: "Guidelines",
- items: [
- "open-source/guidelines/rest-api-guidelines",
- "kratos/guides/e2e-integration-tests",
- ],
- },
- ],
- },
- {
- type: "doc",
- label: "Ory Kratos",
- id: "kratos/quickstart",
- },
- {
- type: "doc",
- label: "Ory Hydra",
- id: "hydra/self-hosted/quickstart",
- },
- {
- type: "doc",
- label: "Ory Keto",
- id: "keto/quickstart",
- },
- {
- type: "doc",
- label: "Ory Polis",
- id: "polis/quickstart",
- },
- {
- type: "doc",
- label: "Ory Oathkeeper",
- id: "oathkeeper/index",
- },
- "self-hosted/deployment",
- //"ecosystem/configuring",
- {
- type: "category",
- label: "Operations and SRE",
- items: [
- {
- type: "autogenerated",
- dirName: "self-hosted/operations",
- },
- ],
- },
- // "ecosystem/upgrading",
- // "ecosystem/sqa",
- // "ecosystem/changelog",
- {
- type: "link",
- label: "Search",
- href: "https://www.ory.com/docs/search",
- },
-]
-
-const oel: SidebarItemsConfig = [
- homeLink,
- "self-hosted/oel/index",
- "self-hosted/oel/quickstart",
- {
- type: "category",
- label: "Ory Hydra OAuth2",
- items: [
- "self-hosted/oel/oauth2/migrate",
- "self-hosted/oel/oauth2/upgrade",
- "self-hosted/oel/oauth2/changelog",
- "self-hosted/oel/oauth2/token-prefix",
- "self-hosted/oel/oauth2/stateless-jwt",
- "self-hosted/oel/oauth2/migrate-postgresql-ttl",
- "self-hosted/oel/oauth2/revert-database-migrations",
- "self-hosted/oel/oauth2/configuration",
- ],
- },
- {
- type: "category",
- label: "Ory Oathkeeper Zero Trust",
- items: [
- "self-hosted/oel/oathkeeper/upgrade-oathkeeper",
- "self-hosted/oel/oathkeeper/changelog",
- "self-hosted/oel/oathkeeper/configuration",
- ],
- },
- {
- type: "category",
- label: "Ory Kratos Identities",
- items: [
- "self-hosted/oel/kratos/upgrade",
- "self-hosted/oel/kratos/changelog",
- "self-hosted/oel/kratos/configuration",
- ],
- },
- {
- type: "category",
- label: "Ory Keto Permissions",
- items: [
- "self-hosted/oel/keto/changelog",
- "self-hosted/oel/keto/configuration",
- ],
- },
- {
- type: "category",
- label: "Ory Polis",
- items: ["self-hosted/oel/polis/changelog"],
- },
- "self-hosted/oel/monitoring/monitoring",
- "self-hosted/oel/high-performance-pooling",
-]
-
-const security: SidebarItemsConfig = [
- homeLink,
- "security-compliance/compliance-and-certifications",
- "security-compliance/personal-data-location",
- //"ecosystem/security",
- "kratos/concepts/security",
- "security-compliance/token-formats",
- "concepts/password-policy",
- "hydra/security-architecture",
- "security-compliance/gdpr",
-]
-
-const elements: SidebarItemsConfig = [
- homeLink,
- "elements/index",
- {
- type: "category",
- label: "Guides",
- collapsible: false,
- link: {
- type: "generated-index",
- title: "Quickstarts",
- description: "Learn how to use Ory Elements in your application!",
- slug: "/elements/guides",
- keywords: ["guides"],
- },
- items: [
- {
- type: "autogenerated",
- dirName: "elements/guides",
- },
- ],
- },
- {
- type: "category",
- label: "Reference",
- collapsible: false,
- link: {
- type: "generated-index",
- title: "Ory Elements Reference",
- description: "Learn about the most important Ory Elements concepts!",
- slug: "/elements/reference",
- keywords: ["guides"],
- },
- items: [
- ...require("../docs/elements/reference/typedoc-sidebar.ts").items,
- "elements/css-reference",
- ],
- },
-]
-
-module.exports = {
- quickstart,
- troubleshooting,
- operations,
- opensource,
- oel,
- kratos,
- hydra,
- keto,
- polis,
- oathkeeper,
- api,
- polisApi,
- sdk,
- cli,
- security,
- elements,
-}
From d51f09a799c09106a6befda786d9fd088dc9e671 Mon Sep 17 00:00:00 2001
From: unatasha8
Date: Tue, 2 Jun 2026 15:32:57 -0700
Subject: [PATCH 29/37] docs: fixed .sh instances on rate limit pages
---
docs/guides/rate-limits-legacy.mdx | 4 ++--
docs/guides/rate-limits-new.mdx | 8 ++++----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/docs/guides/rate-limits-legacy.mdx b/docs/guides/rate-limits-legacy.mdx
index 299f3b8a98..3418f2c9f7 100644
--- a/docs/guides/rate-limits-legacy.mdx
+++ b/docs/guides/rate-limits-legacy.mdx
@@ -125,8 +125,8 @@ async function callApiWithThrottle(request) {
```
Clients that repeatedly exceed rate limits without proper backoff may have their API access temporarily blocked. For high-volume
-use cases that exceed your plan's limits, open a support ticket via the [Ory Console](https://console.ory.sh/support) or email
-[support@ory.sh](mailto:support@ory.sh).
+use cases that exceed your plan's limits, open a support ticket via the [Ory Console](https://console.ory.com/support) or email
+[support@ory.com](mailto:support@ory.com).
### Determine your project's rate limits
diff --git a/docs/guides/rate-limits-new.mdx b/docs/guides/rate-limits-new.mdx
index f6384596b9..01d0f4a48e 100644
--- a/docs/guides/rate-limits-new.mdx
+++ b/docs/guides/rate-limits-new.mdx
@@ -101,11 +101,11 @@ async function callApiWithThrottle(request) {
```
Clients that repeatedly exceed rate limits without proper backoff may have their API access temporarily blocked. For high-volume
-use cases that exceed your plan's limits, open a support ticket via the [Ory Console](https://console.ory.sh/support) or email
-[support@ory.sh](mailto:support@ory.sh).
+use cases that exceed your plan's limits, open a support ticket via the [Ory Console](https://console.ory.com/support) or email
+[support@ory.com](mailto:support@ory.com).
## Load testing
Load testing against the Ory Network requires prior written approval. Unauthorized tests will be detected and may result in
-temporary blocking. To request an approved window, open a support ticket via the [Ory Console](https://console.ory.sh/support) or
-email [support@ory.sh](mailto:support@ory.sh).
+temporary blocking. To request an approved window, open a support ticket via the [Ory Console](https://console.ory.com/support) or
+email [support@ory.com](mailto:support@ory.com).
From 5fdb2bc151a12d49b8a6acd06e470e0e47af15f3 Mon Sep 17 00:00:00 2001
From: unatasha8
Date: Wed, 3 Jun 2026 12:31:21 -0700
Subject: [PATCH 30/37] docs: updated launch dates schedule
---
docs/guides/rate-limits.mdx | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/docs/guides/rate-limits.mdx b/docs/guides/rate-limits.mdx
index 285013f2a5..b7cd0fb8c2 100644
--- a/docs/guides/rate-limits.mdx
+++ b/docs/guides/rate-limits.mdx
@@ -10,11 +10,11 @@ customers are being migrated by subscription tier.
## Which rate limit system applies to you?
-| You are... | Your system |
-| ----------------------------------------------------- | -------------------------------------------- |
-| A new customer (workspace created on or after June 1) | [Rate limits - new](./rate-limits-new) |
-| An existing customer, migration not yet completed | [Rate limits - legacy](./rate-limits-legacy) |
-| An existing customer, migration completed | [Rate limits - new](./rate-limits-new) |
+| You are... | Your system |
+| ------------------------------------------------------ | -------------------------------------------- |
+| A new customer (workspace created on or after June 15) | [Rate limits - new](./rate-limits-new) |
+| An existing customer, migration not yet completed | [Rate limits - legacy](./rate-limits-legacy) |
+| An existing customer, migration completed | [Rate limits - new](./rate-limits-new) |
:::tip
@@ -41,10 +41,10 @@ Migration schedule:
| Phase | Plan | Date |
| ----- | ------------------------------------------------ | --------------- |
-| 1 | New workspaces and existing Developer workspaces | Week of June 1 |
-| 2 | Existing Production workspaces | Week of June 8 |
-| 3 | Existing Growth workspaces | Week of June 15 |
-| 4 | Existing Enterprise workspaces | Week of June 22 |
+| 1 | New workspaces and existing Developer workspaces | Week of June 15 |
+| 2 | Existing Production workspaces | Week of June 22 |
+| 3 | Existing Growth workspaces | Week of June 29 |
+| 4 | Existing Enterprise workspaces | Week of July 6 |
The types of rate limits, for project-based and endpoint-based, remain the same in both rate limit policies.
From 4e0ff60b2a4a43d6f0bc750b198701546b098d5d Mon Sep 17 00:00:00 2001
From: aeneasr <3372410+aeneasr@users.noreply.github.com>
Date: Wed, 10 Jun 2026 12:17:12 +0000
Subject: [PATCH 31/37] docs: bump to 41024d0730ec0a14ca249c3ee393e1e328b5ec27
---
docs/reference/api.json | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/docs/reference/api.json b/docs/reference/api.json
index dd0904bce2..77331fc421 100644
--- a/docs/reference/api.json
+++ b/docs/reference/api.json
@@ -4388,6 +4388,18 @@
"title": "Request body for creating a test OIDC login flow.",
"type": "object"
},
+ "createTestLoginFlowFromOnboardingPortalLinkBody": {
+ "description": "Request body for starting a dry-run OIDC test login flow from an onboarding\nportal link.",
+ "properties": {
+ "provider_id": {
+ "description": "ID of the OIDC provider to test. Must match a provider configured on\nthe link's organization.",
+ "maxLength": 255,
+ "type": "string"
+ }
+ },
+ "required": ["provider_id"],
+ "type": "object"
+ },
"createWorkspaceBody": {
"properties": {
"name": {
@@ -9874,6 +9886,17 @@
],
"type": "object"
},
+ "onboardingPortalTestLoginFlow": {
+ "description": "Response body for a dry-run OIDC test login flow created from an onboarding\nportal link. Only the flow ID is part of the API contract.",
+ "properties": {
+ "id": {
+ "description": "ID of the created test login flow. Append this as the `flow` query\nparameter on the test sign-in UI URL.",
+ "type": "string"
+ }
+ },
+ "required": ["id"],
+ "type": "object"
+ },
"organization": {
"description": "B2B SSO Organization",
"properties": {
@@ -10137,6 +10160,11 @@
"readOnly": true,
"type": "string"
},
+ "last_characters": {
+ "description": "The last characters of the token's value.\n\nLets you tell API keys apart in the UI without revealing the full\nvalue. Empty for keys created before this was introduced.",
+ "readOnly": true,
+ "type": "string"
+ },
"name": {
"description": "The Token's Name\n\nSet this to help you remember, for example, where you use the token.",
"type": "string"
@@ -13787,6 +13815,11 @@
"readOnly": true,
"type": "string"
},
+ "last_characters": {
+ "description": "The last characters of the key's value.\n\nLets you tell API keys apart in the UI without revealing the full\nvalue. Empty for keys created before this was introduced.",
+ "readOnly": true,
+ "type": "string"
+ },
"name": {
"description": "The API key's Name\n\nSet this to help you remember, for example, where you use the API key.",
"type": "string"
From 6759193dde0e1c5a7a8194c682ce5479e6085612 Mon Sep 17 00:00:00 2001
From: ory-bot <60093411+ory-bot@users.noreply.github.com>
Date: Wed, 10 Jun 2026 14:30:37 +0200
Subject: [PATCH 32/37] chore(docs): update of OEL images (#2618)
chore(docs): update OEL image tag
---
.../oel/keto/changelog/v26.2.17.md | 1 +
.../oel/kratos/changelog/v26.2.17.md | 84 +++++++++++++++++++
.../oel/oathkeeper/changelog/v26.2.17.md | 1 +
.../oel/oauth2/changelog/v26.2.17.md | 1 +
docs/self-hosted/oel/oel-hydra-image-tags.md | 1 +
docs/self-hosted/oel/oel-keto-image-tags.md | 1 +
docs/self-hosted/oel/oel-kratos-image-tags.md | 1 +
.../oel/oel-oathkeeper-image-tags.md | 1 +
docs/self-hosted/oel/oel-polis-image-tags.md | 1 +
.../oel/polis/changelog/v26.2.17.md | 1 +
10 files changed, 93 insertions(+)
create mode 100644 docs/self-hosted/oel/keto/changelog/v26.2.17.md
create mode 100644 docs/self-hosted/oel/kratos/changelog/v26.2.17.md
create mode 100644 docs/self-hosted/oel/oathkeeper/changelog/v26.2.17.md
create mode 100644 docs/self-hosted/oel/oauth2/changelog/v26.2.17.md
create mode 100644 docs/self-hosted/oel/polis/changelog/v26.2.17.md
diff --git a/docs/self-hosted/oel/keto/changelog/v26.2.17.md b/docs/self-hosted/oel/keto/changelog/v26.2.17.md
new file mode 100644
index 0000000000..0de2a2a54c
--- /dev/null
+++ b/docs/self-hosted/oel/keto/changelog/v26.2.17.md
@@ -0,0 +1 @@
+No changelog entries found for keto/oel in versions v26.2.17
diff --git a/docs/self-hosted/oel/kratos/changelog/v26.2.17.md b/docs/self-hosted/oel/kratos/changelog/v26.2.17.md
new file mode 100644
index 0000000000..6cdde25cc7
--- /dev/null
+++ b/docs/self-hosted/oel/kratos/changelog/v26.2.17.md
@@ -0,0 +1,84 @@
+## v26.2.17
+
+### Make passkey authenticator, attestation, and timeout options configurable
+
+The passkey strategy now exposes advanced configuration under `selfservice.methods.passkey.config` that was previously hardcoded:
+
+- `authenticator_selection.attachment`, `resident_key`, and `user_verification` control which authenticators are eligible and
+ whether biometrics or a PIN are required. `attachment` now defaults to no constraint, so by default users can register either
+ platform or cross-platform authenticators. Set `attachment: "platform"` to restore the previous behavior of accepting only
+ built-in authenticators.
+- `attestation.preference` sets the attestation conveyance preference sent to the authenticator.
+- `timeouts.registration` and `timeouts.login` set how long the WebAuthn ceremonies stay valid.
+
+All options are optional. Defaults match the previous behavior, so existing deployments do not need to change anything. See the
+[passkey documentation](https://www.ory.sh/docs/kratos/passwordless/passkeys#advanced-configuration) for a full reference and
+examples.
+
+### Reject DeviceAuthn enrollments using a revoked Android attestation CA
+
+Kratos now periodically fetches Google's Android attestation revocation list and rejects DeviceAuthn enrollments whose certificate
+chain contains a revoked CA.
+
+The Android root CAs and the background goroutine that refreshes the revocation list are initialized lazily, on the first
+DeviceAuthn call and only when DeviceAuthn is enabled. Deployments that do not use DeviceAuthn pay no startup cost and emit no
+related logs.
+
+Note: toggling `selfservice.methods.deviceauthn.enabled` from `true` to `false` at runtime does not stop the background goroutine;
+restart the process to fully disable it.
+
+### SCIM data mapper can read the existing identity
+
+The SCIM provisioning data mapper now receives the existing identity through a new `identity` external variable, alongside the
+existing `scim` variable. The variable exposes `traits`, `metadata_public`, and `metadata_admin`, each defaulting to an empty
+object when unset.
+
+This lets a mapper preserve or merge attributes that SCIM does not manage. For example, an identity first created by a SAML or
+OIDC login may store fields such as an object ID in `metadata_public`. Because SCIM provisioning replaces `metadata_public` with
+the mapper output, those fields were previously overwritten. A mapper can now merge them back in:
+
+```jsonnet
+local scim = std.extVar('scim');
+local identity = std.extVar('identity');
+local existingPublic = std.get(identity, 'metadata_public', {});
+
+{
+ identity: {
+ metadata_public: existingPublic + {
+ // SCIM-managed fields. These win on key conflicts.
+ },
+ },
+}
+```
+
+SCIM keeps full-replace semantics: the mapper output still replaces `metadata_public` unless the mapper deliberately merges the
+existing values back in. Mappers that do not reference the `identity` variable are unaffected.
+
+### SCIM enterprise user extension
+
+You can now provision enterprise user attributes through SCIM. Ory Network's SCIM endpoints support the
+`urn:ietf:params:scim:schemas:extension:enterprise:2.0:User` schema from RFC 7643 §4.3, including `employeeNumber`, `costCenter`,
+`organization`, `division`, `department`, and `manager`. Clients can read and write these attributes via POST, PUT, PATCH, and
+GET. PATCH paths and filter expressions accept the URN-prefixed form, so common provisioning flows (such as Okta's incremental
+manager updates) work without configuration changes. Filtering by `employeeNumber` is supported for indexed lookups.
+
+A new `/scim/{client}/v2/ResourceTypes` discovery endpoint advertises the extension to clients that look at it.
+
+The Jsonnet mapper for SCIM-to-identity transformation now sees the enterprise object under the URN key on the `scim` input, so
+customers can map enterprise attributes into identity traits or metadata.
+
+### SCIM provisioning links existing users by verified email domain
+
+SCIM provisioning now links an existing user into an organization when the user is not yet assigned to one and holds a verified
+email address whose domain matches one of the organization's configured domains. Previously, provisioning such a user returned a
+conflict.
+
+When a SCIM client creates a user that already exists as an unclaimed identity, Ory checks the existing identity's verified email
+addresses against the SCIM client organization's domains. On a match, the existing identity is linked into the organization
+instead of failing with a conflict.
+
+To protect against unauthorized access, Ory does not link a user when:
+
+- the matching email address is not verified,
+- the email domain does not match any of the organization's domains, or
+- the user already belongs to a different organization.
diff --git a/docs/self-hosted/oel/oathkeeper/changelog/v26.2.17.md b/docs/self-hosted/oel/oathkeeper/changelog/v26.2.17.md
new file mode 100644
index 0000000000..c0a44a4e22
--- /dev/null
+++ b/docs/self-hosted/oel/oathkeeper/changelog/v26.2.17.md
@@ -0,0 +1 @@
+No changelog entries found for oathkeeper/oel in versions v26.2.17
diff --git a/docs/self-hosted/oel/oauth2/changelog/v26.2.17.md b/docs/self-hosted/oel/oauth2/changelog/v26.2.17.md
new file mode 100644
index 0000000000..080b9f964b
--- /dev/null
+++ b/docs/self-hosted/oel/oauth2/changelog/v26.2.17.md
@@ -0,0 +1 @@
+No changelog entries found for hydra/oel in versions v26.2.17
diff --git a/docs/self-hosted/oel/oel-hydra-image-tags.md b/docs/self-hosted/oel/oel-hydra-image-tags.md
index 631d837cbd..29db4350a2 100644
--- a/docs/self-hosted/oel/oel-hydra-image-tags.md
+++ b/docs/self-hosted/oel/oel-hydra-image-tags.md
@@ -1,5 +1,6 @@
| Image Tag | Release Date |
| ---------------------------------------- | ------------ |
+| 26.2.17 | 2026-06-10 |
| 26.2.16 | 2026-06-05 |
| 26.2.15 | 2026-06-02 |
| 26.2.14 | 2026-05-29 |
diff --git a/docs/self-hosted/oel/oel-keto-image-tags.md b/docs/self-hosted/oel/oel-keto-image-tags.md
index 69a17a9816..9ea8c12b06 100644
--- a/docs/self-hosted/oel/oel-keto-image-tags.md
+++ b/docs/self-hosted/oel/oel-keto-image-tags.md
@@ -1,5 +1,6 @@
| Image Tag | Release Date |
| ---------------------------------------- | ------------ |
+| 26.2.17 | 2026-06-10 |
| 26.2.16 | 2026-06-05 |
| 26.2.15 | 2026-06-02 |
| 26.2.14 | 2026-05-29 |
diff --git a/docs/self-hosted/oel/oel-kratos-image-tags.md b/docs/self-hosted/oel/oel-kratos-image-tags.md
index 566cac32b7..15099a4a36 100644
--- a/docs/self-hosted/oel/oel-kratos-image-tags.md
+++ b/docs/self-hosted/oel/oel-kratos-image-tags.md
@@ -1,5 +1,6 @@
| Image Tag | Release Date |
| ---------------------------------------- | ------------ |
+| 26.2.17 | 2026-06-10 |
| 26.2.16 | 2026-06-05 |
| 26.2.15 | 2026-06-02 |
| 26.2.14 | 2026-05-29 |
diff --git a/docs/self-hosted/oel/oel-oathkeeper-image-tags.md b/docs/self-hosted/oel/oel-oathkeeper-image-tags.md
index 831912cb24..120332d2e7 100644
--- a/docs/self-hosted/oel/oel-oathkeeper-image-tags.md
+++ b/docs/self-hosted/oel/oel-oathkeeper-image-tags.md
@@ -1,5 +1,6 @@
| Image Tag | Release Date |
| ---------------------------------------- | ------------ |
+| 26.2.17 | 2026-06-10 |
| 26.2.16 | 2026-06-05 |
| 26.2.15 | 2026-06-02 |
| 26.2.14 | 2026-05-29 |
diff --git a/docs/self-hosted/oel/oel-polis-image-tags.md b/docs/self-hosted/oel/oel-polis-image-tags.md
index aa8be649ef..8347ca8e21 100644
--- a/docs/self-hosted/oel/oel-polis-image-tags.md
+++ b/docs/self-hosted/oel/oel-polis-image-tags.md
@@ -1,5 +1,6 @@
| Image Tag | Release Date |
| ---------------------------------------- | ------------ |
+| 26.2.17 | 2026-06-10 |
| 26.2.16 | 2026-06-05 |
| 26.2.15 | 2026-06-02 |
| 26.2.14 | 2026-05-29 |
diff --git a/docs/self-hosted/oel/polis/changelog/v26.2.17.md b/docs/self-hosted/oel/polis/changelog/v26.2.17.md
new file mode 100644
index 0000000000..10e80666e5
--- /dev/null
+++ b/docs/self-hosted/oel/polis/changelog/v26.2.17.md
@@ -0,0 +1 @@
+No changelog entries found for polis/oel in versions v26.2.17
From 668a58daf55966d6d61f4a4c4ba27b825e4f2840 Mon Sep 17 00:00:00 2001
From: Arne Luenser
Date: Tue, 9 Jun 2026 14:24:42 +0200
Subject: [PATCH 33/37] docs: document pausing event streams
Add a "Pause and resume event streams" section to the live event streams
guide covering how to pause/resume a stream from the Ory Console, how to
create a stream as paused, and what happens to events while a stream is
paused.
Most importantly, it explains the buffering behavior: while paused, events
keep accumulating and are retained for up to 7 days. Resuming within that
window delivers the buffered backlog; events older than 7 days are
permanently discarded.
Co-Authored-By: Claude Opus 4.8 (1M context)
---
docs/actions/live-events.mdx | 50 ++++++++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
diff --git a/docs/actions/live-events.mdx b/docs/actions/live-events.mdx
index 04934b082b..d4312a59a0 100644
--- a/docs/actions/live-events.mdx
+++ b/docs/actions/live-events.mdx
@@ -368,6 +368,56 @@ subscribe AWS SQS, AWS Kinesis Data Firehose, or any other AWS service that can
:::
+## Pause and resume event streams
+
+You can pause an event stream to temporarily stop delivering events to its destination without deleting the stream or its
+configuration. Pause a stream while its destination is undergoing maintenance, is misconfigured, or is being replaced, then resume
+it to continue delivery. Pausing one event stream has no effect on your other event streams.
+
+### Pause or resume a stream
+
+1. Go to your project in the [Ory Console](https://console.ory.com).
+2. Click **Project settings** in the top navigation bar.
+3. Click **Event streams** in the left sidebar. The **Status** column shows whether each stream is **Active** or **Paused**.
+4. Open the **⋯** menu next to the stream and click **Pause** or **Resume**.
+
+You can also change the status through the Ory APIs. Updating an event stream is a partial update: send only the `status` field
+(`active` or `paused`) and every other setting keeps its current value. This is the recommended way to pause or resume a stream,
+because resubmitting the destination is not required.
+
+When you resume a stream, Ory first verifies that the destination is reachable, the same check that runs when you create or update
+a stream.
+
+### Create a stream as paused
+
+When you create a stream in the Ory Console, set **Status** to **Paused** to save it without starting delivery. This is useful
+when you want to configure a stream before its destination is ready. Resume it later from the stream's **⋯** menu.
+
+### What happens to events while a stream is paused
+
+In short: while a stream is paused Ory keeps receiving your project's events and buffers them for that stream for up to **7
+days**. Resume within that window and Ory delivers everything that was buffered while the stream was paused.
+
+In more detail:
+
+- Pausing only stops delivery. Ory keeps collecting the events your project produces and holds them in an internal buffer
+ dedicated to that stream. Nothing is delivered to your destination while the stream is paused.
+- Buffered events are retained for up to 7 days. When you resume the stream, Ory delivers the buffered backlog first and then
+ continues with new events. This catch-up delivery follows the same guarantees as normal delivery: best-effort, possibly out of
+ order, and possibly with duplicates.
+- Events that have been buffered for longer than 7 days are permanently discarded, whether or not you resume the stream. A stream
+ that stays paused for more than 7 days keeps only the most recent 7 days of events; anything older is lost.
+
+Pausing one stream does not affect your other event streams, and does not affect events available elsewhere in Ory, such as the
+project's activity view in the Ory Console.
+
+:::warning
+
+Pausing buffers events for up to 7 days. If a stream stays paused for longer, the oldest events are permanently lost. Resume the
+stream within 7 days to receive everything you missed.
+
+:::
+
## Retry policy
If your event stream destination is unavailable or misconfigured, Ory Network will retry sending the event multiple times with an
From d5943dc3f25807949b4696a84c9bb9e72f283657 Mon Sep 17 00:00:00 2001
From: ory-bot <60093411+ory-bot@users.noreply.github.com>
Date: Wed, 10 Jun 2026 20:25:23 +0000
Subject: [PATCH 34/37] autogen: update license overview
---
.reports/dep-licenses.csv | 279 --------------------------------------
1 file changed, 279 deletions(-)
diff --git a/.reports/dep-licenses.csv b/.reports/dep-licenses.csv
index 988c6a18cb..780787fddf 100644
--- a/.reports/dep-licenses.csv
+++ b/.reports/dep-licenses.csv
@@ -1,281 +1,2 @@
"module name","licenses"
-"cloud.google.com/go/compute/metadata","Apache-2.0"
-"code.dny.dev/ssrf","MIT"
-"dario.cat/mergo","BSD-3-Clause"
-"filippo.io/edwards25519","BSD-3-Clause"
-"github.com/Masterminds/goutils","Apache-2.0"
-"github.com/Masterminds/semver/v3","MIT"
-"github.com/Masterminds/sprig/v3","MIT"
-"github.com/Nvveen/Gotty","BSD-2-Clause"
-"github.com/ProtonMail/go-crypto","BSD-3-Clause"
-"github.com/ProtonMail/go-mime","MIT"
-"github.com/ProtonMail/gopenpgp/v2","MIT"
-"github.com/arbovm/levenshtein","BSD-3-Clause"
-"github.com/asaskevich/govalidator","MIT"
-"github.com/avast/retry-go/v4","MIT"
-"github.com/aymerick/douceur","MIT"
-"github.com/beorn7/perks/quantile","MIT"
-"github.com/boombuler/barcode","MIT"
-"github.com/bwmarrin/discordgo","BSD-3-Clause"
-"github.com/cenkalti/backoff","MIT"
-"github.com/cenkalti/backoff/v3","MIT"
-"github.com/cenkalti/backoff/v4","MIT"
-"github.com/cespare/xxhash/v2","MIT"
-"github.com/cloudflare/circl","BSD-3-Clause"
-"github.com/cockroachdb/cockroach-go/v2","Apache-2.0"
-"github.com/containerd/continuity/pathdriver","Apache-2.0"
-"github.com/coreos/go-oidc/v3/oidc","Apache-2.0"
-"github.com/cristalhq/jwt/v4","MIT"
-"github.com/davecgh/go-spew/spew","ISC"
-"github.com/deckarep/golang-set","MIT"
-"github.com/dghubble/oauth1","MIT"
-"github.com/dgraph-io/ristretto","Apache-2.0"
-"github.com/dgraph-io/ristretto/z","MIT"
-"github.com/distribution/reference","Apache-2.0"
-"github.com/docker/cli","Apache-2.0"
-"github.com/docker/docker","Apache-2.0"
-"github.com/docker/go-connections","Apache-2.0"
-"github.com/docker/go-units","Apache-2.0"
-"github.com/dustin/go-humanize","MIT"
-"github.com/evanphx/json-patch","BSD-3-Clause"
-"github.com/evanphx/json-patch/v5","BSD-3-Clause"
-"github.com/fatih/color","MIT"
-"github.com/fatih/structs","MIT"
-"github.com/felixge/fgprof","MIT"
-"github.com/felixge/httpsnoop","MIT"
-"github.com/fsnotify/fsnotify","BSD-3-Clause"
-"github.com/fxamacker/cbor/v2","MIT"
-"github.com/gabriel-vasile/mimetype","MIT"
-"github.com/getkin/kin-openapi","MIT"
-"github.com/ghodss/yaml","MIT"
-"github.com/ghodss/yaml","BSD-3-Clause"
-"github.com/go-crypt/crypt","MIT"
-"github.com/go-crypt/x","BSD-3-Clause"
-"github.com/go-faker/faker/v4","MIT"
-"github.com/go-jose/go-jose/v3","Apache-2.0"
-"github.com/go-jose/go-jose/v3/json","BSD-3-Clause"
-"github.com/go-jose/go-jose/v4","Apache-2.0"
-"github.com/go-jose/go-jose/v4/json","BSD-3-Clause"
-"github.com/go-logr/logr","Apache-2.0"
-"github.com/go-logr/stdr","Apache-2.0"
-"github.com/go-openapi/errors","Apache-2.0"
-"github.com/go-openapi/jsonpointer","Apache-2.0"
-"github.com/go-openapi/strfmt","Apache-2.0"
-"github.com/go-openapi/swag","Apache-2.0"
-"github.com/go-playground/locales","MIT"
-"github.com/go-playground/universal-translator","MIT"
-"github.com/go-playground/validator/v10","MIT"
-"github.com/go-sql-driver/mysql","MPL-2.0"
-"github.com/go-viper/mapstructure/v2","MIT"
-"github.com/go-webauthn/webauthn","BSD-3-Clause"
-"github.com/go-webauthn/x/revoke","BSD-2-Clause"
-"github.com/gobuffalo/envy","MIT"
-"github.com/gobuffalo/fizz","MIT"
-"github.com/gobuffalo/flect","MIT"
-"github.com/gobuffalo/github_flavored_markdown","MIT"
-"github.com/gobuffalo/github_flavored_markdown/internal/russross/blackfriday","BSD-2-Clause"
-"github.com/gobuffalo/github_flavored_markdown/internal/shurcooL/sanitized_anchor_name","MIT"
-"github.com/gobuffalo/helpers","MIT"
-"github.com/gobuffalo/nulls","MIT"
-"github.com/gobuffalo/plush/v4","MIT"
-"github.com/gobuffalo/pop/v6","MIT"
-"github.com/gobuffalo/tags/v3","MIT"
-"github.com/gobuffalo/validate/v3","MIT"
-"github.com/gobwas/glob","MIT"
-"github.com/goccy/go-yaml","MIT"
-"github.com/gofrs/flock","BSD-3-Clause"
-"github.com/gofrs/uuid","MIT"
-"github.com/gofrs/uuid/v3","MIT"
-"github.com/gogo/protobuf","BSD-3-Clause"
-"github.com/golang-jwt/jwt/v4","MIT"
-"github.com/golang-jwt/jwt/v5","MIT"
-"github.com/golang/gddo/httputil","BSD-3-Clause"
-"github.com/golang/mock/gomock","Apache-2.0"
-"github.com/golang/protobuf/proto","BSD-3-Clause"
-"github.com/gomarkdown/markdown","BSD-2-Clause"
-"github.com/google/go-github/v38/github","BSD-3-Clause"
-"github.com/google/go-jsonnet","Apache-2.0"
-"github.com/google/go-querystring/query","BSD-3-Clause"
-"github.com/google/go-tpm","Apache-2.0"
-"github.com/google/pprof/profile","Apache-2.0"
-"github.com/google/shlex","Apache-2.0"
-"github.com/google/uuid","BSD-3-Clause"
-"github.com/gorilla/css/scanner","BSD-3-Clause"
-"github.com/gorilla/securecookie","BSD-3-Clause"
-"github.com/gorilla/sessions","BSD-3-Clause"
-"github.com/gorilla/websocket","BSD-3-Clause"
-"github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors","Apache-2.0"
-"github.com/grpc-ecosystem/go-grpc-prometheus","Apache-2.0"
-"github.com/grpc-ecosystem/grpc-gateway/v2","BSD-3-Clause"
-"github.com/gtank/cryptopasta","CC0-1.0"
-"github.com/hashicorp/go-cleanhttp","MPL-2.0"
-"github.com/hashicorp/go-retryablehttp","MPL-2.0"
-"github.com/hashicorp/golang-lru/v2","MPL-2.0"
-"github.com/hashicorp/golang-lru/v2/simplelru","BSD-3-Clause"
-"github.com/huandu/xstrings","MIT"
-"github.com/imdario/mergo","BSD-3-Clause"
-"github.com/inhies/go-bytesize","BSD-3-Clause"
-"github.com/invopop/yaml","MIT"
-"github.com/invopop/yaml","BSD-3-Clause"
-"github.com/jackc/chunkreader/v2","MIT"
-"github.com/jackc/pgconn","MIT"
-"github.com/jackc/pgio","MIT"
-"github.com/jackc/pgpassfile","MIT"
-"github.com/jackc/pgproto3/v2","MIT"
-"github.com/jackc/pgservicefile","MIT"
-"github.com/jackc/pgtype","MIT"
-"github.com/jackc/pgx/v4","MIT"
-"github.com/jackc/pgx/v5","MIT"
-"github.com/jackc/puddle/v2","MIT"
-"github.com/jmoiron/sqlx","MIT"
-"github.com/joho/godotenv","MIT"
-"github.com/josharian/intern","MIT"
-"github.com/julienschmidt/httprouter","BSD-3-Clause"
-"github.com/kballard/go-shellquote","MIT"
-"github.com/klauspost/compress","MIT"
-"github.com/klauspost/compress","Apache-2.0"
-"github.com/klauspost/compress","BSD-3-Clause"
-"github.com/klauspost/compress/internal/snapref","BSD-3-Clause"
-"github.com/klauspost/compress/zstd/internal/xxhash","MIT"
-"github.com/knadh/koanf/maps","MIT"
-"github.com/knadh/koanf/parsers/json","MIT"
-"github.com/knadh/koanf/parsers/toml","MIT"
-"github.com/knadh/koanf/parsers/yaml","MIT"
-"github.com/knadh/koanf/providers/posflag","MIT"
-"github.com/knadh/koanf/v2","MIT"
-"github.com/leodido/go-urn","MIT"
-"github.com/lestrrat-go/backoff/v2","MIT"
-"github.com/lestrrat-go/blackmagic","MIT"
-"github.com/lestrrat-go/httpcc","MIT"
-"github.com/lestrrat-go/iter","MIT"
-"github.com/lestrrat-go/jwx","MIT"
-"github.com/lestrrat-go/option","MIT"
-"github.com/lib/pq","MIT"
-"github.com/luna-duclos/instrumentedsql","MIT"
-"github.com/mailru/easyjson","MIT"
-"github.com/mattn/go-colorable","MIT"
-"github.com/mattn/go-isatty","MIT"
-"github.com/microcosm-cc/bluemonday","BSD-3-Clause"
-"github.com/mitchellh/copystructure","MIT"
-"github.com/mitchellh/mapstructure","MIT"
-"github.com/mitchellh/reflectwalk","MIT"
-"github.com/moby/docker-image-spec/specs-go/v1","Apache-2.0"
-"github.com/moby/term","Apache-2.0"
-"github.com/mohae/deepcopy","MIT"
-"github.com/munnerz/goautoneg","BSD-3-Clause"
-"github.com/nyaruka/phonenumbers","MIT"
-"github.com/oklog/ulid","Apache-2.0"
-"github.com/oleiade/reflections","MIT"
-"github.com/opencontainers/go-digest","Apache-2.0"
-"github.com/opencontainers/image-spec/specs-go","Apache-2.0"
-"github.com/opencontainers/runc/libcontainer/user","Apache-2.0"
-"github.com/openzipkin/zipkin-go/model","Apache-2.0"
-"github.com/ory/analytics-go/v5","MIT"
-"github.com/ory/cli","Apache-2.0"
-"github.com/ory/client-go","Apache-2.0"
-"github.com/ory/dockertest/v3","Apache-2.0"
-"github.com/ory/dockertest/v3/docker","BSD-2-Clause"
-"github.com/ory/fosite","Apache-2.0"
-"github.com/ory/go-convenience/stringslice","MIT"
-"github.com/ory/gochimp3","MIT"
-"github.com/ory/graceful","Apache-2.0"
-"github.com/ory/herodot","Apache-2.0"
-"github.com/ory/hydra-client-go/v2","Apache-2.0"
-"github.com/ory/hydra/v2","Apache-2.0"
-"github.com/ory/jsonschema/v3","BSD-3-Clause"
-"github.com/ory/keto","Apache-2.0"
-"github.com/ory/keto/proto/ory/keto","Apache-2.0"
-"github.com/ory/kratos","Apache-2.0"
-"github.com/ory/kratos-client-go","Apache-2.0"
-"github.com/ory/mail/v3","MIT"
-"github.com/ory/nosurf","MIT"
-"github.com/ory/x","Apache-2.0"
-"github.com/ory/x/reqlog","MIT"
-"github.com/pborman/uuid","BSD-3-Clause"
-"github.com/pelletier/go-toml","MIT"
-"github.com/pelletier/go-toml","Apache-2.0"
-"github.com/perimeterx/marshmallow","MIT"
-"github.com/peterhellberg/link","MIT"
-"github.com/phayes/freeport","BSD-3-Clause"
-"github.com/pkg/browser","BSD-2-Clause"
-"github.com/pkg/errors","BSD-2-Clause"
-"github.com/pkg/profile","BSD-2-Clause"
-"github.com/pmezard/go-difflib/difflib","BSD-3-Clause"
-"github.com/pquerna/otp","Apache-2.0"
-"github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil","BSD-3-Clause"
-"github.com/prometheus/client_golang/prometheus","Apache-2.0"
-"github.com/prometheus/client_model/go","Apache-2.0"
-"github.com/prometheus/common","Apache-2.0"
-"github.com/prometheus/procfs","Apache-2.0"
-"github.com/rogpeppe/go-internal/modfile","BSD-3-Clause"
-"github.com/rs/cors","MIT"
-"github.com/sabhiram/go-gitignore","MIT"
-"github.com/samber/lo","MIT"
-"github.com/sawadashota/encrypta","MIT"
-"github.com/seatgeek/logrus-gelf-formatter","BSD-3-Clause"
-"github.com/segmentio/backo-go","MIT"
-"github.com/sergi/go-diff/diffmatchpatch","MIT"
-"github.com/shopspring/decimal","MIT"
-"github.com/sirupsen/logrus","MIT"
-"github.com/slack-go/slack","BSD-2-Clause"
-"github.com/soheilhy/cmux","Apache-2.0"
-"github.com/sourcegraph/annotate","BSD-3-Clause"
-"github.com/sourcegraph/syntaxhighlight","BSD-3-Clause"
-"github.com/spf13/cast","MIT"
-"github.com/spf13/cobra","Apache-2.0"
-"github.com/spf13/pflag","BSD-3-Clause"
-"github.com/stretchr/testify","MIT"
-"github.com/tidwall/gjson","MIT"
-"github.com/tidwall/match","MIT"
-"github.com/tidwall/pretty","MIT"
-"github.com/tidwall/sjson","MIT"
-"github.com/tomnomnom/linkheader","MIT"
-"github.com/toqueteos/webbrowser","MIT"
-"github.com/twmb/murmur3","BSD-3-Clause"
-"github.com/urfave/negroni","MIT"
-"github.com/wI2L/jsondiff","MIT"
-"github.com/x448/float16","MIT"
-"github.com/xeipuuv/gojsonpointer","Apache-2.0"
-"github.com/xeipuuv/gojsonreference","Apache-2.0"
-"github.com/xeipuuv/gojsonschema","Apache-2.0"
-"github.com/xtgo/uuid","BSD-3-Clause"
-"github.com/zmb3/spotify/v2","Apache-2.0"
-"go.mongodb.org/mongo-driver","Apache-2.0"
-"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc","Apache-2.0"
-"go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace","Apache-2.0"
-"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp","Apache-2.0"
-"go.opentelemetry.io/contrib/propagators/b3","Apache-2.0"
-"go.opentelemetry.io/contrib/propagators/jaeger","Apache-2.0"
-"go.opentelemetry.io/contrib/samplers/jaegerremote","Apache-2.0"
-"go.opentelemetry.io/otel","Apache-2.0"
-"go.opentelemetry.io/otel/exporters/jaeger","Apache-2.0"
-"go.opentelemetry.io/otel/exporters/jaeger/internal/third_party/thrift/lib/go/thrift","Apache-2.0"
-"go.opentelemetry.io/otel/exporters/jaeger/internal/third_party/thrift/lib/go/thrift","GNU-All-permissive-Copying-License"
-"go.opentelemetry.io/otel/exporters/jaeger/internal/third_party/thrift/lib/go/thrift","BSD-3-Clause"
-"go.opentelemetry.io/otel/exporters/otlp/otlptrace","Apache-2.0"
-"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp","Apache-2.0"
-"go.opentelemetry.io/otel/exporters/zipkin","Apache-2.0"
-"go.opentelemetry.io/otel/metric","Apache-2.0"
-"go.opentelemetry.io/otel/sdk","Apache-2.0"
-"go.opentelemetry.io/otel/trace","Apache-2.0"
-"go.opentelemetry.io/proto/otlp","Apache-2.0"
-"go.uber.org/automaxprocs","MIT"
-"golang.org/x/crypto","BSD-3-Clause"
-"golang.org/x/exp","BSD-3-Clause"
-"golang.org/x/mod","BSD-3-Clause"
-"golang.org/x/net","BSD-3-Clause"
-"golang.org/x/oauth2","BSD-3-Clause"
-"golang.org/x/sync","BSD-3-Clause"
-"golang.org/x/sys","BSD-3-Clause"
-"golang.org/x/text","BSD-3-Clause"
-"golang.org/x/xerrors","BSD-3-Clause"
-"google.golang.org/genproto/googleapis/api","Apache-2.0"
-"google.golang.org/genproto/googleapis/rpc","Apache-2.0"
-"google.golang.org/grpc","Apache-2.0"
-"google.golang.org/protobuf","BSD-3-Clause"
-"gopkg.in/yaml.v2","Apache-2.0"
-"gopkg.in/yaml.v3","MIT"
-"sigs.k8s.io/yaml","MIT"
-"sigs.k8s.io/yaml","BSD-3-Clause"
-
From da48c2ff03f996386b06ba105b99610f7b95c18e Mon Sep 17 00:00:00 2001
From: unatasha8
Date: Wed, 10 Jun 2026 13:29:39 -0700
Subject: [PATCH 35/37] docs: fix underscore in Learn more link
---
docs/solutions/overview.mdx | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/docs/solutions/overview.mdx b/docs/solutions/overview.mdx
index 7321bd3a25..b784e07acc 100644
--- a/docs/solutions/overview.mdx
+++ b/docs/solutions/overview.mdx
@@ -18,7 +18,7 @@ business needs.
@@ -27,7 +27,7 @@ business needs.
@@ -36,7 +36,7 @@ business needs.
From 2d730fc3872439a2da58daee16ef14f8a1d93b9e Mon Sep 17 00:00:00 2001
From: Andreas Bucksteeg
Date: Thu, 11 Jun 2026 11:41:39 +0200
Subject: [PATCH 36/37] docs: replace migration schedule with link to
announcement blog post
---
docs/guides/rate-limits.mdx | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/docs/guides/rate-limits.mdx b/docs/guides/rate-limits.mdx
index b7cd0fb8c2..4ac392e741 100644
--- a/docs/guides/rate-limits.mdx
+++ b/docs/guides/rate-limits.mdx
@@ -37,14 +37,8 @@ The new rate limits will be introduced gradually to ensure a smooth transition.
you before your workspace is migrated. During the migration, your project rate limit behavior remains unchanged until the cutover
completes.
-Migration schedule:
-
-| Phase | Plan | Date |
-| ----- | ------------------------------------------------ | --------------- |
-| 1 | New workspaces and existing Developer workspaces | Week of June 15 |
-| 2 | Existing Production workspaces | Week of June 22 |
-| 3 | Existing Growth workspaces | Week of June 29 |
-| 4 | Existing Enterprise workspaces | Week of July 6 |
+For details on the rollout and migration schedule, read the
+[announcement blog post](https://www.ory.com/blog/new-rate-limit-model-ory-network).
The types of rate limits, for project-based and endpoint-based, remain the same in both rate limit policies.
From 9d68350db441a60587ea5f8151fad4019257dffd Mon Sep 17 00:00:00 2001
From: Wassim Bougarfa <12980387+wassimoo@users.noreply.github.com>
Date: Thu, 11 Jun 2026 17:45:02 +0200
Subject: [PATCH 37/37] feat: re-add migration schedule for new rate limits
rollout
---
docs/guides/rate-limits.mdx | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/docs/guides/rate-limits.mdx b/docs/guides/rate-limits.mdx
index 4ac392e741..33a98eb60c 100644
--- a/docs/guides/rate-limits.mdx
+++ b/docs/guides/rate-limits.mdx
@@ -37,7 +37,16 @@ The new rate limits will be introduced gradually to ensure a smooth transition.
you before your workspace is migrated. During the migration, your project rate limit behavior remains unchanged until the cutover
completes.
-For details on the rollout and migration schedule, read the
+Migration schedule:
+
+| Phase | Plan | Date |
+| ----- | ------------------------------------------------ | --------------- |
+| 1 | New workspaces and existing Developer workspaces | Week of June 15 |
+| 2 | Existing Production workspaces | Week of June 22 |
+| 3 | Existing Growth workspaces | Week of June 29 |
+| 4 | Existing Enterprise workspaces | Week of July 6 |
+
+For more details on the rollout and migration schedule, read the
[announcement blog post](https://www.ory.com/blog/new-rate-limit-model-ory-network).
The types of rate limits, for project-based and endpoint-based, remain the same in both rate limit policies.
|