Skip to main content
Open the app in a separate window instead of navigating away or embedding it. The current page never unloads. Reach for this when a full-page redirect is too heavy but you don’t want the app inline — and it’s the recommended route for React Native, where it runs in the system auth session (ASWebAuthenticationSession on iOS / Chrome Custom Tabs on Android). See the overview for detection, hosting, and the shared CORS requirements.
On the web, browsers block popups that aren’t opened from a user gesture. Call openUpgradePopup (or the hook’s open) synchronously inside the click handler — don’t await anything before it, or the popup is blocked and you get an UpgradePopupBlockedError.
openUpgradePopup opens the window synchronously and resolves completed when the app reports done (refreshing the session on success). completed rejects with an UpgradePopupClosedError if the user closes the popup first, and the call throws an UpgradePopupBlockedError if the browser blocks it.

Handling errors

See also

Last modified on July 24, 2026