Documentation
Everything you need to ship the widget
One script tag to install, a small config object to shape it, and a JavaScript API when you want full control. This page is the whole reference, no rabbit holes.
Quick start
Create a project in the dashboard, copy its key, and paste this before your closing </body> tag. The loader is async, renders inside a Shadow DOM so it can never clash with your CSS, and stays under 150 KB gzipped.
<scriptasyncsrc="https://app.bugpot.io/embed/loader.js?p=your_project_key"></script>
Reload your site → the Feedback button appears bottom-right → send yourself a test report.
Configuration
The widget ships configured from your project settings in the dashboard: position, label, branding, forms and issue types all live there. To override per page, define window.BugpotConfig before the loader tag.
<script>window.BugpotConfig = {buttonPosition: 'bottom-left',buttonLabel: 'Report a bug',brandColor: '#28d48a',metadata: { build: '2026.07.1', tenant: 'acme' },};</script><script async src="https://app.bugpot.io/embed/loader.js?p=your_project_key"></script>
| Option | Type | Default | What it does |
|---|---|---|---|
| buttonPosition | 'bottom-right' | 'bottom-left' | 'bottom-center' | 'hidden' | 'bottom-right' | Where the launcher sits. Use hidden to drive the widget from your own button via the JavaScript API. |
| buttonLabel | string | 'Feedback' | Text on the launcher button. |
| buttonIconOnly | boolean | false | Show just the pin icon, no label. Handy on small screens. |
| brandColor | string | null | null | Hex colour like "#28d48a" for the launcher and accents. Defaults to your workspace branding. |
| maskingSelectors | string[] | [] | CSS selectors blurred in the browser before the screenshot is captured. |
| showFooter | boolean | true | Hide the “Powered by” footer in the widget (available on the Agency plan). |
| metadata | Record<string, unknown> | {} | Key-value data attached to every report: build number, tenant, feature flags. |
JavaScript API
Once loaded, the widget exposes window.Bugpot. Hide the built-in launcher and open the widget from any element of your own:
<script>window.BugpotConfig = { buttonPosition: 'hidden' };</script><script async src="https://app.bugpot.io/embed/loader.js?p=your_project_key"></script><button onclick="window.Bugpot?.open()">Give feedback</button>
Bugpot.open()Open the widget; screenshot capture starts immediately.Bugpot.close()Close the widget and restore the launcher (unless hidden).Bugpot.destroy()Remove the widget from the page entirely.Bugpot.versionThe running widget version string.Bugpot.metadataMutable metadata bag, read at submission time (see below).
Custom metadata
Anything you put in the metadata bag rides along with every report and shows up in the triage inbox. Seed it in the config, or mutate it at runtime as your app state changes. It’s read at the moment a report is submitted.
// Seeded before load…window.BugpotConfig = {metadata: { build: '2026.07.1', plan: 'studio' },};// …and updated whenever you like after loadwindow.Bugpot.metadata.userId = 'u_4821';window.Bugpot.metadata.cartId = 'c_812';
Values from custom form fields (severity pickers, dropdowns, checkboxes you add in the form builder) arrive as custom metadata on the report too.
Data masking
Anything matching your masking selectors is blurred in the browser, before the screenshot is created. Account numbers and customer data never reach Bugpot’s servers in the first place.
window.BugpotConfig = {maskingSelectors: ['.account-number', '[data-private]', '#billing-email'],};
More on the pipeline in Product → Data masking.
What gets captured
Alongside the annotated screenshot, every report carries the context your developer would otherwise have to ask for:
- Page URL and title
- Browser and OS (user agent)
- Screen and viewport size
- Device pixel ratio
- Console output (log → error)
- Failed network requests
- Reporter name and email
- Your custom metadata
Console and network capture are toggled per project in the dashboard.
Integrations & webhooks
From 1 October 2026you’ll connect Jira, GitHub, GitLab, Linear and eleven more trackers from workspace settings; each integration page has its own step-by-step setup. Prefer to build your own pipeline? Webhooks are live today: they deliver every event as JSON, signed with HMAC so you can verify the sender, with a replayable delivery log when your endpoint was down. See Security for the details.
Support
Stuck on anything? Write to hello@bugpot.io. A human answers. Live service health is on the status page.
Put a feedback button on your site today
Paste the script tag, send yourself a test report, and see the full context arrive in your inbox.



