Widget & Dashboard Integration
How UPTIQ Business Health widgets and the Business Health Dashboard authenticate your users via SSO — compare Component Auth and Get Token to pick the right approach.
Recommended for Digital Banking: Provision ProactivelyThe two SSO approaches below authenticate a user reactively, the first time they log in. Business Health also supports provisioning your platform's clients proactively, independent of SSO — for platforms like digital banking, where you want every client synced regardless of whether they ever log in, this is often the recommended approach. See Provisioning Without SSO below.
UPTIQ Business Health brings business health insights into your own platform in two ways:
- Widgets — individual components (Accounts, Credit Score, Cash Flow Forecast, and others) embedded directly into your pages.
- Business Health Dashboard — the full dashboard experience, embedded as an iframe.
In order to show a specific user's data in Business Health, both approaches require a signed-in session for that user. This section explains how Business Health authenticates your users via Single Sign-On (SSO), so they never have to create or remember a separate Business Health password.
Domain Whitelisting RequiredEmbedding individual widgets and/or the iframe Dashboard requires your domain(s) to be whitelisted with Business Health beforehand. Provide UPTIQ with the domain(s) you'll be embedding from as part of your integration setup.
Three Ways to Set Up SSO
Your backend calls Business Health directly, using a signed request, before the page loads. Works for widgets and the full Business Health Dashboard — the recommended starting point for most integrations.
The widget kicks off SSO itself, using auth parameters already on the page. You implement an endpoint Business Health calls back to verify the user. Widgets only, no request signing.
Federate with your existing SAML Identity Provider. Business Health acts as the Service Provider, redirecting users to your IdP and consuming the signed assertion it returns. Best suited to the full Dashboard as its own page, since it requires a visible browser redirect.
| Get Token | Component Auth | SAML | |
|---|---|---|---|
| Works for | Widgets and the full Dashboard | Widgets only | Full Dashboard, or a widget that's the main content of its page — see below |
| Who initiates the handshake | Your backend, before the page loads | The widget itself, from the browser | The browser, redirected to your IdP |
| What you build | A signed API call your backend makes to Business Health | An endpoint Business Health calls to verify the user and return their details | A SAML Identity Provider configured to issue assertions with the required claims |
| Request signing | HMAC-SHA-256 | None | SAML assertion signing (via your IdP's certificate) |
| Best fit when... | You want your backend to fully control the handshake, or you're embedding the full Dashboard | You want the widget to trigger SSO on its own, using auth parameters already available on the page | Business Health is its own destination page, or you'd rather not write any backend integration code |
All three approaches produce the same result: a Business Health access token (JWT) that widgets and the Dashboard use to communicate with Business Health on the user's behalf, and all three create or update the user's Business Health account from the same underlying data — see SSO Payload for that shared schema.
How Business Health Matches Users & Companies
Once any of the three flows above delivers a payload (directly, or via SAML's CUSTOMER/COMPANY claims), Business Health resolves it the same way:
-
Matching the user: Business Health looks for an existing user whose Business Health login matches the payload's
externalId(or, ifexternalIdwas omitted, matches itsemailinstead). If none is found, a new user is created from the payload's fields —name/firstName/lastName,email,externalId,isActive, andlanguage. -
Matching each company (every entry in
accountData): ifaccountData.externalIdis provided, Business Health looks for a company with thatexternalIdanywhere in Business Health, regardless of which user(s) it's already linked to. IfaccountData.externalIdis omitted, Business Health instead looks for a company already linked to this user that matches an identifier you provided (accountData.identifier, e.g. an SSN or EIN). Either way, if a match is found, that company is updated, not duplicated; if none is found, a new company is created from theaccountDatafields. -
One user can have multiple companies, and one company can have multiple users — linked in a genuine many-to-many relationship, built up incrementally as logins happen over time.
-
accountData.isActiveCompanymarks which company (if a payload describes more than one) should be treated as the user's current/selected one; only the first entry flaggedtrueis honored. This is re-evaluated on every login — a company not flagged active in a given payload has its active status explicitly cleared for that login, not just left alone. -
A company's
externalIdis set once, when it's first created, and isn't changed by later logins even if a later payload's value for that company differs. Its other fields (name, email, phone, address) are kept in sync on every login.
How It Fits Together
flowchart TD
A[User logs in to<br/>User Platform] --> B{SSO handshake}
B -->|Get Token| D[Backend-initiated —<br/>see Get Token Flow]
B -->|Component Auth| C[Widget-initiated —<br/>see Component Auth Flow]
B -->|SAML| S[IdP-federated —<br/>see SAML Flow]
D --> E[Business Health creates/updates<br/>User & Company, issues JWT]
C --> E
S --> E
E --> F[Widgets and/or Dashboard render,<br/>using the JWT]
F -.optional.-> G[User Platform Data:<br/>Business Health pulls data directly<br/>from the User Platform]
F -.optional.-> H[Third-Party App Data:<br/>user connects an external app<br/>via the App Connector widget]
style G stroke-dasharray: 5 5
style H stroke-dasharray: 5 5
Provisioning Without SSO
All three SSO approaches above create a company as part of a user's login. Business Health also supports provisioning your platform's clients ahead of time — independent of whether or when they log in.
One way to do this: create a company directly with the Create company endpoint, using the same externalId you'd otherwise send in the SSO Payload's accountData. If that user later logs in via SSO, Business Health matches on externalId and updates the existing company instead of creating a duplicate.
Updated 13 days ago