A valid request URL is required to generate request examples{
"environment": "live",
"default_locale": "pt-BR",
"attribution": true,
"support_chat": true,
"help_center": true,
"support_ai": true,
"help_url": "<string>",
"changelog_url": "<string>",
"branding": {
"logo_url": "<string>",
"tokens": {
"light": {
"colorPrimary": "#4f46e5",
"colorPrimaryText": "<string>",
"colorText": "<string>",
"colorMuted": "<string>",
"colorBackground": "<string>",
"colorBorder": "<string>",
"colorDanger": "<string>",
"borderRadius": "0.5rem",
"fontFamily": "\"Inter var\", ui-sans-serif, system-ui, sans-serif"
},
"dark": {
"colorPrimary": "#4f46e5",
"colorPrimaryText": "<string>",
"colorText": "<string>",
"colorMuted": "<string>",
"colorBackground": "<string>",
"colorBorder": "<string>",
"colorDanger": "<string>",
"borderRadius": "0.5rem",
"fontFamily": "\"Inter var\", ui-sans-serif, system-ui, sans-serif"
}
}
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}What this environment supports
What a screen has to know before it can render itself: which environment this is, how its surfaces look, which language they speak, and which halves of the widget it answers.
Addressed by publishable key, and public for the same reason JWKS is — it reads, it mints nothing, and it sends no mail. There is no Origin gate, so a server rendering a page is not refused.
attribution says whether the screens carry the “powered by UserKit” mark — the one answer here that comes from the plan rather than from the environment, so that removing it takes effect the moment it is bought.
Cache-Control: public, max-age=60, stale-while-revalidate=600, stale-if-error=600. Short, because a developer changing a setting wants to see it; revalidatable, because a screen must not wait on us to render; and served from the last copy while we are failing, because a screen that cannot read this one should still render.
Rate limited to 120 requests per minute per IP.
A valid request URL is required to generate request examples{
"environment": "live",
"default_locale": "pt-BR",
"attribution": true,
"support_chat": true,
"help_center": true,
"support_ai": true,
"help_url": "<string>",
"changelog_url": "<string>",
"branding": {
"logo_url": "<string>",
"tokens": {
"light": {
"colorPrimary": "#4f46e5",
"colorPrimaryText": "<string>",
"colorText": "<string>",
"colorMuted": "<string>",
"colorBackground": "<string>",
"colorBorder": "<string>",
"colorDanger": "<string>",
"borderRadius": "0.5rem",
"fontFamily": "\"Inter var\", ui-sans-serif, system-ui, sans-serif"
},
"dark": {
"colorPrimary": "#4f46e5",
"colorPrimaryText": "<string>",
"colorText": "<string>",
"colorMuted": "<string>",
"colorBackground": "<string>",
"colorBorder": "<string>",
"colorDanger": "<string>",
"borderRadius": "0.5rem",
"fontFamily": "\"Inter var\", ui-sans-serif, system-ui, sans-serif"
}
}
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}Path Parameters
The environment's publishable key.
"uk_pk_live_…"
Response
The environment's public configuration.
live, test The language this environment speaks to somebody it knows nothing about — the middle term of the chain a message is rendered through (the contact's own locale, then this, then the platform default).
Always a locale that can actually be rendered, never the empty string: a screen drawn before there is a session has nobody to ask, so an absent answer here would be a page inferring a language from nothing. Set it on the environment; changing it takes effect without redeploying anything.
pt-BR, en Whether this environment's sign-in screens carry the "powered by UserKit" mark. true on the free tier; false once the plan includes removing it, so upgrading takes the mark off without redeploying anything.
It is the one field here that comes from the plan rather than from the environment, and it fails in the generous direction: when the plan cannot be resolved this answers false, because marking a form somebody paid to keep clean is the more expensive mistake.
Whether this environment answers the contact support surface (/v1/contact/conversations) — what tells the conversation half of <HelpWidget /> to render at all. Declared here rather than inferred from the API's age, so a widget never draws a chat nothing answers.
Whether the organization's help center has at least one published article. It is the one bit a page needs to decide whether to draw a help button, and it rides here so the script-tag widget does not download every collection and article summary on every page load to learn it. A published article appears here the moment it is published, on the same cacheable read as everything else.
Whether the support surface may answer by itself: the organization turned the auto-responder on AND the platform can honor it. Declared so a widget that wants to promise an instant answer never learns the capability from a version number — and any doubt reads false, because a chat that under-promises sends nobody wrong.
Where this environment's published help center lives on the web — what <HelpWidget /> links an article to, so a reader can open it full-width or share it. On a domain the tenant PROVED they own it is that host and nothing else (https://ajuda.tenant.com/help); on the shared portal it carries the publishable key, which is what makes one deployment serving every organization able to tell whose product a page belongs to. A claimed-but-unverified domain is never used: that host does not answer yet, so a link onto it would be dead.
Where this environment's public release page lives, resolved the same three ways help_url is — and the prefix a post's permalink hangs off: {changelog_url}/{slug}. Always sent: whether anything is published there is that document's own answer, not a reason to withhold the address.
How this environment's screens look — read here so a colour changed in the panel takes effect without anybody redeploying, exactly as default_locale does.
It deliberately carries no custom_css. This document is addressed by a publishable key, which sits in page HTML by design, so a stylesheet on it would be arbitrary CSS anybody could get rendered on a shared host. A tenant's own stylesheet travels on GET /v1/portal/tenants/{host}, which answers for verified domains only.
Show child attributes
Show child attributes