Problem
The Support email is down right now, so I can’t open a ticket for our customer. I’m trying to render a small localized string inside a Universal Login partial using the documented custom-text variable mechanism, and it’s coming up empty. I’ve verified all the usual suspects and want to check whether this is a known behavior or limitation before I spin further.
What I’m trying to do
Per the docs, define a custom text variable with the Management API for a given screen, then reference it in a partial as {{ prompt.screen.text.varX }} and have it render on that screen.
I defined var-broker-login (a neutral example rather than our real one, which is an alternate sign-in link):
PUT /api/v2/prompts/{screen}/custom-text/en
{ "screen": { "var-broker-login": "Use a different sign-in option" } }
And referenced it in the screen’s secondary-actions-start partial:
{{ prompt.screen.text.varBrokerLogin }}
What I’ve verified
- Storage is correct.
GET /prompts/{screen}/custom-text/{en,nl}reads back the exact object, keyed under the screen name. - The body key must be the screen name. If I use the prompt-family name as the body key instead, the API rejects it with
"Invalid screen \"<family>\"". - Partials DO inject. Static HTML/CSS in the same partial renders fine (e.g. CSS that hides a button works).
- Other template variables work. A test partial containing
{{ locale }}rendereden. - Rendering mode is
standard. I deliberately avoidedadvanced/ACUL, which I understand disables partials.
The actual problem
Every prompt.screen.text.* reference renders empty when the screen is served over the custom domain. I tried all accessor forms in the same partial:
{{ prompt.screen.text.varBrokerLogin }}
{{ prompts.screen.text.varBrokerLogin }}
{{ prompt.screen.text['varBrokerLogin'] }}
{{ prompt.screen.text['var-broker-login'] }}
All come back blank. I also tried a built-in text key the same way and it also rendered empty, which suggests the entire prompt.screen.text object is not being injected into the partial render context, not just my custom variable.
My tenant setup
universal_login_experience: newidentifier_first: true(so the identifier-first screen is the one being rendered)- Tenant
sandbox_version:22 - Custom page template configured and applying correctly (both
auth0:headandauth0:widgetpresent; custom header/footer render) - Custom domain is
ready, TLS provisioned, marked default - Rendered via an
/authorizeflow on the custom domain (a raw*.auth0.comhost doesn’t apply partials, which I understand is by design)
Workaround I’m using for now
Since locale is available in the partial, I replaced the custom-text reference with a Liquid conditional:
{% if locale == "nl" %}...{% else %}...{% endif %}
That renders correctly, which confirms the partial and template context are healthy, and isolates the failure specifically to the custom-text bridge.