Rendering reference

This page describes the component descriptor structure returned by the native journey. Use it to implement the visual and functional components of your native login experience.

Screens

The screen field represents the current logical step in the login or registration flow - for example, identification, password, registration. Use it to determine which screen to display and whether any special handling is needed.

The full screen state object returned by every native journey response:

FieldTypeDescription
screenstringIdentifier of the current journey step (for example, identification, registration).
formsarrayList of Form objects, each containing a widgets array.
layoutobjectLayout descriptor defining the visual arrangement of widgets across forms.
messagesobjectError and informational messages for the current step, including a global message.
hostedUrlstringFallback URL to the hosted login page, if the screen cannot be rendered natively.
finalizeUrlstringPresent when the journey is complete. Pass to finalizeSession().
📘

In minimal response mode the render field is not included in any widget, and the layout and branding top-level fields are omitted. See Minimal response mode.

Forms and widgets

This section describes the widget types returned in the forms[].widgets array. Each widget has a type and an id. The application is responsible for rendering each widget type and collecting the user's input.

Common fields

Every widget includes:

FieldTypeDescription
idstringUnique identifier within the form. Use as the field path when submitting (see note below).
typestringWidget type. Determines which fields are present.
📘

Submission format

Widget id values use dot notation to represent a path into a nested object. When building the form submission body, expand dot-separated ids into nested objects rather than using them as flat keys. For example, ids address.city and address.country become { "address": { "city": "...", "country": "..." } }, not { "address.city": "...", "address.country": "..." }.

Widget types

static

Display-only text or HTML content. Does not collect user input.

FieldTypeDescription
valuestringContent to display
renderobjecttype: "text" | "html" - how to interpret value
{
	"type": "static",
	"id": "section-title",
	"value": "Sign in"
}

input

A single-line text input field.

FieldTypeDescription
labelstringField label
valuestringPre-filled value, if any
readonlybooleanWhether the field is editable
autocompletestringHTML autocomplete hint (for example, "username", "email")
inputmodestringInput mode hint (for example, "email", "numeric")
validatorobjectrequired, minLength, maxLength, regex
renderobjectautocompleteHint - additional autocomplete hint
{
	"type": "input",
	"id": "email",
	"label": "Email",
	"value": null,
	"readonly": false,
	"autocomplete": "username",
	"inputmode": "email",
	"validator": {
		"required": true,
		"minLength": null,
		"maxLength": null,
		"regex": null
	}
}

password

A password input field. May include a quality indicator.

FieldTypeDescription
labelstringField label
qualityIndicatorbooleanWhether to show a password strength indicator
validatorobjectminLength, maxLength, maxNumericCharacterSequences, maxRepeatedCharacters, mustContain (UPPERCASE, LOWERCASE, NUMERIC, SPECIAL), restrictedCharacters
{
	"type": "password",
	"id": "password",
	"label": "Enter your password",
	"qualityIndicator": false,
	"validator": null
}

passcode

A fixed-length passcode input, typically used for MFA.

FieldTypeDescription
labelstringField label
validatorobjectlength - expected digit count
{
	"type": "passcode",
	"id": "passcode",
	"label": "6-digit passcode",
	"validator": {
		"length": 6
	}
}

phone

A phone number input field.

FieldTypeDescription
labelstringField label
valuestringPre-filled value, if any
readonlybooleanWhether the field is editable
validatorobjectrequired
{
	"type": "phone",
	"id": "phone",
	"label": "Telephone number",
	"value": null,
	"readonly": false,
	"validator": {
		"required": true
	}
}

date

A date input field.

FieldTypeDescription
labelstringField label
valuestringPre-filled value in YYYY-MM-DD format
readonlybooleanWhether the field is editable
renderobjecttype: "native" | "fieldSet" - display variant
validatorobjectnotBefore, notAfter, required
{
	"type": "date",
	"id": "dob",
	"label": "Date of birth",
	"value": null,
	"readonly": false,
	"validator": null
}

checkbox

A boolean toggle field.

FieldTypeDescription
labelstringField label
valuebooleanCurrent value
readonlybooleanWhether the field is editable
renderobjecttype: "checkboxHidden" | "checkboxShown", `labelType: "text"
validatorobjectrequired
{
	"type": "checkbox",
	"id": "keepMeLoggedIn",
	"label": "Keep me logged in",
	"readonly": false,
	"value": false,
	"validator": {
		"required": false
	}
}

select

A single-choice selection field.

FieldTypeDescription
labelstringField label
valuestringCurrently selected value
readonlybooleanWhether the field is editable
optionsarrayList of { type: "item", value, label } or { type: "group", label, options: [...] }
renderobjecttype: "dropdown" | "radio"
validatorobjectrequired
{
	"type": "select",
	"id": "country",
	"label": "Country",
	"value": null,
	"readonly": false,
	"options": [
		{ "type": "item", "value": "us", "label": "United States" },
		{ "type": "item", "value": "de", "label": "Germany" }
	],
	"validator": {
		"required": true
	}
}

multiSelect

A multi-choice selection field.

FieldTypeDescription
labelstringField label
valuearrayArray of currently selected values
readonlybooleanWhether the field is editable
optionsarraySame structure as select
validatorobjectminSelectable, maxSelectable
{
	"type": "multiSelect",
	"id": "interests",
	"label": "Interests",
	"value": [],
	"readonly": false,
	"options": [
		{ "type": "item", "value": "news", "label": "News" },
		{ "type": "item", "value": "sports", "label": "Sports" }
	],
	"validator": {
		"minSelectable": 1,
		"maxSelectable": 3
	}
}

submit

A form submission button or link. Submitting this widget advances the flow.

FieldTypeDescription
labelstringButton label
renderobjecttype: "button" | "link", textColor, bgColor, hint: { icon, variant }
{
	"type": "submit",
	"id": "submit",
	"label": "Continue"
}

close

Signals the end of the journey and instructs the application to close or exit the login experience. No form submission is needed.

FieldTypeDescription
labelstringButton label
renderobjecttype: "button" | "link", textColor, bgColor, hint: { icon, variant }
{
	"type": "close",
	"id": "close",
	"label": "Done"
}

passkeyLogin

Triggers a WebAuthn passkey assertion for login.

FieldTypeDescription
labelstringButton label
assertionOptionsobjectPublicKeyCredentialRequestOptions from the server
renderobjecttype: "button", hint: { variant }

passkeyEnroll

Triggers a WebAuthn passkey registration (enrollment).

FieldTypeDescription
labelstringButton label
enrollOptionsobjectPublicKeyCredentialCreationOptions from the server
renderobjecttype: "button", hint: { variant }

webauthnLogin

Triggers a WebAuthn assertion for a specific authenticator type.

FieldTypeDescription
labelstringButton label
authenticatorTypestring"deviceBiometrics" or "securityKey"
assertionOptionsobjectPublicKeyCredentialRequestOptions from the server
renderobjecttype: "button", hint: { variant }

webauthnEnroll

Triggers a WebAuthn registration for a specific authenticator type.

FieldTypeDescription
labelstringButton label
authenticatorTypestring"deviceBiometrics" or "securityKey"
enrollOptionsobjectPublicKeyCredentialCreationOptions from the server
renderobjecttype: "button", hint: { variant }

Layout

The layout object (included in full/non-minimal responses) describes how widgets from different forms should be arranged on the screen. It supports nested vertical and horizontal grouping.

type LayoutWidget = {
	type: 'vertical' | 'horizontal';
	items: Array<{ type: 'widget'; formId: string; widgetId: string } | LayoutWidget>;
};

Each leaf node references a widget by formId + widgetId. Use this to compose the visual layout rather than rendering forms sequentially.

Branding

The branding object (included in full/non-minimal responses) provides tenant-level styling data:

FieldTypeDescription
logoUrlstring | nullURL of the tenant logo
brandNamestring | nullTenant or brand name
copyrightstring | nullCopyright notice
privacyPolicyUrlstring | nullLink to the privacy policy
siteTermsUrlstring | nullLink to the terms of service