Account Experience Overview | Ory
Ory Account Experience
The Ory Account Experience is the default user interface for all self-service screens like login, registration, or consent. It can be accessed under https://your-slug.projects.oryapis.com/login. New Ory Network projects are automatically configured to use the Account Experience. You can find various customizations and settings in the Ory Console under Account Experience.
Settings and expired sessions
Opening account settings requires an active session. If your session expires before an existing settings flow loads, the Account Experience redirects you to sign in again. Any return_to parameter is preserved and remains subject to the project's allowed return URLs.
Theming
The Account Experience can be themed using the Ory Console. Head over to the theming settings. It is also possible to set a custom logo and favicon.
In Customize UI on Branding → Theming in the Ory Console, you configure the light color palette. Ory Console does not provide an editor for a separate dark palette.
You can configure a separate dark palette through the project API by setting theme_variables_dark under services.account_experience.config. The hosted Ory Account Experience applies these colors when the visitor's system or browser prefers dark mode (prefers-color-scheme: dark). Without a dark palette, the light palette is used for both preferences. The hosted pages do not include a manual theme switch.
The dark palette is a JSON object with the same keys as the light palette, such as ax_background_default or form_background_default. If you have customized the light palette, you can use its saved colors as a starting point for the dark palette. GET /projects/{project_id} returns these colors under services.account_experience.config.theme_variables_light. Without custom colors, this object is empty.
Use the Ory CLI to update individual color keys:
ory patch project <project-id> \
--add '/services/account_experience/config/theme_variables_dark/ax_background_default="#0f172a"' \
--add '/services/account_experience/config/theme_variables_dark/form_background_default="#1e293b"' \
--add '/services/account_experience/config/theme_variables_dark/interface_foreground_default_primary="#f8fafc"'
```
This example sets the page background, form background, and primary text color for dark mode.
For your own theme switch or full control over styling, build your UI with [Ory Elements](/content/docs/elements/index.html) or the [Ory SDKs](/content/docs/getting-started/custom-ui/index.html) and set the styles in your own CSS.
## Legal footer links
The Account Experience can show links to your Terms of Service, Privacy Policy, and Contact pages in the footer of all self-service pages. Configure them in **Branding** → **Theming** in the [Ory Console](https://console.ory.com/projects/current/account-experience/theming) under **Legal and footer links**:
- **Terms of Service URL** and **Privacy Policy URL** accept `http(s)` URLs.
- **Contact URL** accepts an `http(s)` URL or a `mailto:` link.
Leave a field empty to hide that link. If no URL is set, the Account Experience doesn't render the footer. All links open in a new tab.
The link labels are localized automatically based on the user's language and [can be customized per language](/content/docs/account-experience#footer-link-labels/index.html).
## Translations (i18n) & Message Customization
The Ory Account Experience includes built-in translations for 83 languages. You can enable languages per project. If `enabled_locales` is unset or empty, the project uses these 10 languages: `en`, `de`, `es`, `fr`, `it`, `ja`, `nl`, `pt`, `ru`, and `zh`. This list applies only when `locale_behavior` is `respect_accept_language`.
Manage enabled languages and the default language in **Branding** → **Localization** in the [Ory Console](https://console.ory.com/projects/current/account-experience/locales). You can enable additional languages from the full list below.
### Full list of supported languages
- Afrikaans (`af`)
- Akan (`ak`)
- Amharic (`am`)
- Arabic (`ar`)
- Assamese (`as`)
- Azerbaijani (Latin) (`az`)
- Belarusian (`be`)
- Bulgarian (`bg`)
- Bamanankan (`bm`)
- Bangla (`bn`)
- Catalan (`ca`)
- Czech (`cs`)
- Danish (`da`)
- German (`de`)
- Greek (`el`)
- English (`en`)
- Spanish (`es`)
- Estonian (`et`)
- Persian (`fa`)
- Finnish (`fi`)
- French (`fr`)
- Gujarati (`gu`)
- Hausa (Latin) (`ha`)
- Hebrew (`he`)
- Hindi (`hi`)
- Croatian (`hr`)
- Hungarian (`hu`)
- Armenian (`hy`)
- Indonesian (`id`)
- Igbo (`ig`)
- Italian (`it`)
- Japanese (`ja`)
- Georgian (`ka`)
- Kazakh (`kk`)
- Khmer (`km`)
- Kannada (`kn`)
- Korean (`ko`)
- Central Kurdish (`ku`)
- Kyrgyz (`ky`)
- Lithuanian (`lt`)
- Latvian (`lv`)
- Macedonian (`mk`)
- Malayalam (`ml`)
- Mongolian (Cyrillic) (`mn`)
- Marathi (`mr`)
- Malay (`ms`)
- Burmese (`my`)
- Nepali (`ne`)
- Dutch (`nl`)
- Norwegian (Bokmal) (`no`)
- Odia (`or`)
- Punjabi (`pa`)
- Polish (`pl`)
- Pashto (`ps`)
- Portuguese (`pt`)
- Romanian (`ro`)
- Russian (`ru`)
- Sindhi (`sd`)
- Sinhala (`si`)
- Slovak (`sk`)
- Slovenian (`sl`)
- Somali (`so`)
- Albanian (`sq`)
- Serbian (Latin) (`sr`)
- Sundanese (`su`)
- Swedish (`sv`)
- Kiswahili (`sw`)
- Tamil (`ta`)
- Telugu (`te`)
- Tajik (Cyrillic) (`tg`)
- Thai (`th`)
- Turkmen (`tk`)
- Tagalog (`tl`)
- Turkish (`tr`)
- Uyghur (`ug`)
- Ukrainian (`uk`)
- Urdu (`ur`)
- Uzbek (Latin) (`uz`)
- Vietnamese (`vi`)
- Xhosa (`xh`)
- Yoruba (`yo`)
- Chinese (Simplified) (`zh`)
- Zulu (`zu`)
The source is available in the [GitHub repository of Ory Elements](https://github.com/ory/elements/tree/main/packages/elements-react/src/locales).
Language selection depends on the project's `locale_behavior` setting:
- `force_default`: All users see the project's `default_locale`, regardless of their browser preferences. The default locale is English (`en`) unless you change it.
- `respect_accept_language`: The Ory Account Experience matches the browser's `Accept-Language` header against the project's enabled languages. If the header is missing or no enabled language matches, it falls back to English (`en`).
Custom translations replace individual built-in messages for a language. Use the edit button next to that language in Ory Console to customize them. Languages without custom translations, and messages you don't customize, use the built-in text.
The **Reset to default** option in **Branding** → **Localization** in the [Ory Console](https://console.ory.com/projects/current/account-experience/locales) is available when `respect_accept_language` is enabled. Once confirmed, it restores the 10 default enabled languages, sets English (`en`) as the default language, and removes all custom translations.
### Footer link labels
The [legal footer links](/content/docs/account-experience#legal-footer-links/index.html) use these translation keys:
| Key | Default (English) |
| --- | --- |
| `footer.terms_of_service.label` | Terms of Service |
| `footer.privacy_policy.label` | Privacy Policy |
| `footer.contact.label` | Contact |
Override them like any other message in **Branding** → **Localization** in the [Ory Console](https://console.ory.com/projects/current/account-experience/locales) to change a label for a specific language. If a language has no override or built-in translation, the English label is used.
A label override can also contain a markdown link, for example `[Nutzungsbedingungen](https://example.com/agb)`. In that case the URL from the label replaces the URL configured on the theming page for that language. Use this to point users to a translated version of the document. Only `http(s)` and `mailto:` URLs are allowed in markdown links; other URLs render as plain text. The corresponding URL must still be set on the theming page — an empty field hides the link for all languages.
## Custom Domains
The Account Experience is also available under custom domains the same way it works on the slug URL.