What you need
The easiest way to get a working embed is to request its generated HTML with your Study ID:code into your page. The study must be provisioned. For a simple link instead, use type=button; that response also includes study_link.
If you build the widget markup yourself, it needs these values:
Use the API Study ID to request the embed code. Use the generated widget values as returned; the widget’s
assistant-id is not necessarily the API Study ID.Quickstart
1
Grab your keys
Copy the Study ID, then call
GET /api/public/v1/studies/{study_id}/embed-code?type=widget to get the widget values.2
Install or include the widget
Run
npm install @userintuition-ai/web for React, or drop in the UMD <script> tag for plain HTML.3
Mount it
Add the generated
<userintuition-widget> element and script, or pass its values to <UserIntuitionWidget />.4
Style and scope
Set
theme, position, size, and brand colors. Use show-based-on-url and delay-interval so the widget only appears where it should.5
Test the interview
Open the page, trigger the widget, and complete a test interview. The response will appear in your Study Dashboard alongside link and invite responses.
Install
The package is published as@userintuition-ai/web.
Embedding methods
There are four ways to mount the widget. Pick the one that matches your stack.1. HTML custom element
The simplest option. Drop in the script tag and a<userintuition-widget> element anywhere in your HTML.
2. JavaScript loader
If you need to mount programmatically (for example, after a route change or user action), create the same custom element after the widget script loads.3. React component
For React apps, install the npm package and import the component.4. Web component variant
For React apps that prefer a thin wrapper around the underlying custom element, useUserIntuitionWidgetWebComponent. It is the package’s default export and the recommended React surface.
Modes
The widget supports three interview modes. Set the mode that fits your audience and the depth of feedback you want.Position and size
Control where the widget anchors and how much room it takes up on screen.Position
Size
Theme and branding
The widget ships withlight and dark presets. You can override individual colors to match your brand.
title, cta-title, cta-subtitle, start-button-text, end-button-text, and mode-specific empty-state messages (voice-empty-message, chat-empty-message, chat-placeholder, hybrid-empty-message, and others).
Consent flow
Whenconsent-required is enabled, the widget shows a consent dialog before the interview can start. The participant’s choice is stored in localStorage so they only see the dialog once per device.
Consent state is keyed by
consent-storage-key. If you change the key, the widget will treat returning participants as new and prompt them again.Smart display
You usually don’t want the widget to appear on every page or fire instantly. Use these props to scope when and where it shows.Voice and reconnect options
Voice mode has a few extra knobs for transcript display and reconnection.Where to find your keys
Use your Study ID to request the generated embed code. Copypublic-key, assistant-id, and invite-id from that response when configuring the widget yourself.
Public key
Find this in your account settings under API keys. Safe to ship in client-side code.
Widget values
Request
GET /api/public/v1/studies/{study_id}/embed-code?type=widget with your Study ID and copy the generated widget values.Browser support
The widget runs in any modern browser that supports:- ES6+
- The Custom Elements API
- Microphone access (for voice and hybrid modes)
Next.js and React Server Components
The widget is a client-only component — it toucheswindow, localStorage, and the microphone. In Next.js 13+ with the App Router, mark the file as a client component.
Next steps
Share a study link
The simpler alternative — a hosted URL anyone can open in a browser.
Account settings
Request generated embed code for your Study ID.

