Skip to main content
The User Intuition AI widget is an embeddable on-site interview surface. Drop it into any web app and participants can start a voice or chat interview without leaving your product. The widget triggers a live Study from inside your page, captures the response, and feeds it back into your dashboard like any other interview. Use it for in-app feedback, post-purchase surveys, churn intercepts, or always-on listening from inside your product.

What you need

The easiest way to get a working embed is to request its generated HTML with your Study ID:
Copy the returned 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, use UserIntuitionWidgetWebComponent. 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 with light and dark presets. You can override individual colors to match your brand.
You can also customize widget copy with 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).
When consent-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. Copy public-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)
For React installs, React 16.8+ is required as a peer dependency.

Next.js and React Server Components

The widget is a client-only component — it touches window, localStorage, and the microphone. In Next.js 13+ with the App Router, mark the file as a client component.
Don’t import the widget into a server component or render it during SSR. The bundle assumes a browser environment and will throw if it loads on the server.

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.