VRPlatformVRPlatform
Embed the Hosted UI

UI States

Make the embedded shell predictable across loading, sizing, expiration, and errors

Build your shell around these states. For the exact session fields, see the session contract and the API reference.

StateShell behavior
Session loadingShow product-owned loading UI; do not mount an unauthenticated iframe
Iframe loadingKeep stable dimensions and show a loading layer
Channel connectingValidate iframe window and exact origin before port transfer
ReadyRemove loading only after the authenticated channel sends ready
SizingApply positive integer heights from resize, or retain fixed dimensions
Bootstrap expiringMount before bootstrapExpiresAt, 60 seconds after issuance
Session expiringRequest a successor and send its complete URL through session.renew
Session renewedKeep iframe mounted with its current route, filters, and report state
Session expiredShow an expired state and create a new identity-bound iframe session
Access deniedStop retries and show an account/team access action
Network failureOffer bounded retry without changing team or credential

A missing, malformed, replayed, expired, or access-denied initial session renders an explicit error screen inside the iframe because no authenticated channel exists yet. After channel connection, branch on the strict error code and recoverable value instead of parsing display text.

If the selected team changes, revoke the old session and create a new one for the new team. Never reuse a token from another team merely because the iframe URL is still open.

Log correlation IDs and structured error codes in your backend diagnostics, but do not expose bootstrap URLs, codes, partner secrets, or bearer tokens in browser telemetry.