password_policy is what the server will actually accept - render your signup form’s rules from it instead of hardcoding them, so a stricter policy set later doesn’t silently start rejecting submissions your form told the user were fine. It’s optional on the type only because this response is cached for an hour: a client that fetched it just before the field shipped won’t see it until the cache turns over.
See Registration modes for what registration_mode controls.
Building a custom auth UI
The prebuilt forms (<AuthFlow> and friends in @kerne/react/ui) read this endpoint - in React, via useAuthConfig() - to decide which fields and buttons to render. A hand-built auth UI has to read the same config, or it will offer a method the tenant has turned off:
portal_url is where to actually send an unauthenticated visitor to reach the hosted portal (apps/portal) - every auth and billing flow (sign-up, magic link, password reset, email verification, checkout) resolves there, null only if no portal is deployed for this environment. post_auth_redirect_url is the opposite direction: where the portal sends the session back once it’s done, = portal_redirect_url ?? app_url.
The live endpoint also returns a handful of dashboard-only settings (onboarding state, token TTLs, the tenant’s chosen overview tiles) that this SDK’s
AuthConfig type deliberately leaves untyped - they describe Kerne’s own console, not something a client-side integration acts on.
