Add one <script> tag to your HTML, just before the closing </body>. Replace YOUR_PROJECT_ID with the project ID from your Reqio dashboard.
Basic embed
<script
src="https://reqio.app/widget.js"
data-project-id="YOUR_PROJECT_ID"
async
></script>
The widget initialises automatically when the script loads. It mounts a feedback button onto your page inside an isolated Shadow DOM (<div id="reqio-widget-root">), so your existing styles are unaffected and no CSS conflicts are possible.
Where to find your project ID
- Open the Reqio dashboard.
- Select your project.
- Go to Settings → Widget.
- Copy the project ID from the embed snippet.
Async loading
The async attribute is required. The widget script uses document.currentScript with a fallback querySelector so it resolves your data-project-id correctly whether the script is loaded synchronously, asynchronously, or injected dynamically after page load.
Passing an identity token at render time
If your server has already minted a signed identity token for the current user, pass it inline via data-identity-token. The widget sends the token on load without any additional JavaScript call.
<script
src="https://reqio.app/widget.js"
data-project-id="YOUR_PROJECT_ID"
data-identity-token="<token minted by your server>"
async
></script>
This is the recommended path for server-rendered pages (Next.js Server Components, Rails ERB, Django templates, etc.) because the token is ready before the page reaches the browser.
Identifying users from JavaScript
If you cannot pass the token at render time (for example, a SPA where the user logs in after the initial page load), call window.Reqio.identify() after the user authenticates:
window.Reqio.identify(token); // token is a string minted by your server
The widget installs window.Reqio.identify before it mounts, so you can call it before or after the widget has finished loading. Calls made before the widget is ready are queued and replayed once it initialises.
Double-load protection
The widget checks for an existing reqio-widget-root element before mounting. A second <script> tag on the same page is a no-op. window.Reqio.identify is still installed and the queue is still drained, but a second widget instance is never created.
What happens next
Once the widget is on your page, users will see a floating feedback button. Clicking it opens an overlay where they can submit a feature request, report an error, or share feedback. Submissions appear in your Reqio dashboard immediately.
To identify users and weight their feedback by revenue, read Identity and revenue weighting.