Lite FeedbackLite FeedbackDocs

Documentation

Lite Feedback is a feedback widget you add to any website with a single line of code. Visitors send you a message in one click — and you receive it with full context (page, device, browser, OS, timezone, and any custom data you attach). This guide covers installation, customization, developer integration, identifying your users, listening to events, the REST API, and the MCP server for coding assistants. It also covers webhooks and Slack notifications.

Need your snippet? Your personal install code lives in your dashboard → open a domain → Popup integration. Everywhere below, replace YOUR_DOMAIN_ID with the ID from that snippet.

Quick start — the one-line script

Paste this single line into your site's HTML. The widget loads asynchronously (defer), so it never blocks your page.

<script lf69="YOUR_DOMAIN_ID" defer src="https://litefeedback.com/min.litefeedback.js"></script>

Where do I put it?

  • Anywhere inside the <head> or before the closing </body> tag.
  • On every page where you want the widget to appear. Most site builders and CMSs let you add it once, globally (see below).
  • That's the whole setup — no build step, no npm package, no configuration in code. Appearance and text are configured visually in your dashboard.

Install on your platform

The widget is a plain <script> tag, so it works on any stack. Here's where to paste it for the most common platforms.

Plain HTML / custom code

Paste the snippet into your template's <head>. Done.

WordPress

Use a header-snippet plugin (e.g. WPCode or Insert Headers and Footers), or paste it into your theme's header.php before </head>. Step-by-step guide →

Shopify

In your admin, go to Online Store → Themes → Edit code and paste the snippet into theme.liquid, just before </head>.

Wix

Go to Settings → Custom Code → Add Custom Code, paste the snippet, and set it to load on All pages in the Head. Wix guide →

Webflow

Open Project Settings → Custom Code and paste the snippet into the Head Code field, then publish. Webflow guide →

Squarespace

Go to Settings → Advanced → Code Injection and paste the snippet into the Header box.

Framer

Open Project Settings → General → Custom Code and paste the snippet into Start of <head> tag.

Google Tag Manager

Create a new Custom HTML tag, paste the snippet, and set the trigger to All Pages. Handy if you can't edit your site's HTML directly.

Verify it's working

  1. Open your site in a new browser tab (a normal window, not incognito with blockers).
  2. The feedback button (or popup, depending on your settings) should appear after your configured delay.
  3. Send a test message — it shows up instantly in your dashboard.
Not showing up? Make sure the snippet is on the page you're viewing, that the lf69 ID matches your domain, and that no content blocker is hiding it. On mobile, check the “Show popup for mobile devices” setting.

Customization

Everything visual is configured in your dashboard (no code) under a domain's settings. Available options:

  • Main color
  • Popup title
  • Textarea placeholder
  • Submit button label
  • Reopen button label
  • Success & error messages
  • Auto-display on load (with delay in ms)
  • Show / hide on mobile
  • Optional email field (and make it required)
  • Email placeholder
  • Hide the “Powered by” watermark Unlimited
  • Email notifications (realtime, daily & weekly digests)
  • Telegram, webhook & Slack notifications Unlimited
  • MCP server for Cursor, Claude Code & Codex Unlimited

Notifications, webhooks & Slack

Configure how you get alerted when new feedback arrives. Open a domain in your dashboard and expand Notifications & Webhook in the left-hand settings panel.

Email

Choose realtime delivery, a daily recap, or a weekly recap. Daily and weekly digests require a paid plan; realtime email is available on every plan.

Telegram

Realtime Telegram alerts require the Unlimited plan. Connect your account first under User settings → Telegram connection, then enable notifications per domain. Optionally turn on silent mode so alerts arrive without sound or vibration.

Generic webhook

Available on the Unlimited plan. Enable the webhook toggle and paste any HTTPS endpoint. Lite Feedback sends a POST request with a JSON body whenever new feedback is created (from the widget or the REST API). Use it with Zapier, Make, n8n, your own backend, or any tool that accepts inbound webhooks.

// POST https://your-endpoint.example/hooks/feedback
// Content-Type: application/json
{
  "event": "feedback.created",
  "domain": {
    "id": "YOUR_DOMAIN_ID",
    "name": "example.com"
  },
  "feedback": {
    "id": "f_abc123",
    "message": "Love the product, but checkout is slow on mobile",
    "created_at": "2026-05-30T14:22:00.000Z",
    "pathname": "/pricing",
    "email": "jane@example.com",
    "user_identifier": "user_12345",
    "browser": "Chrome",
    "os": "macOS",
    "device": "Desktop",
    "timezone": "Europe/Paris",
    "tags": ["Performance"],
    "status": "new",
    "sentiment": "Neutral",
    "priority": "medium",
    "extradata": null
  }
}
FieldDescription
eventAlways feedback.created for new feedback.
domain.idYour domain ID (same as the lf69 attribute in the install snippet).
domain.nameThe domain label you set in the dashboard.
feedback.idUnique feedback identifier.
feedback.messageThe feedback text.
feedback.created_atISO 8601 timestamp.
feedback.pathnamePage path where the feedback was sent (if available).
feedback.emailVisitor email, if provided.
feedback.user_identifierYour custom visitor id (window.lite_feedback_user_id), if set.
feedback.browser / os / deviceTechnical context from the visitor session.
feedback.tags / status / sentimentPresent when AI triage ran (Unlimited plan).
feedback.extradataCustom JSON metadata from the REST API, if any.
Tip: In Zapier or Make, create a scenario triggered by a custom webhook, paste the URL Lite Feedback gives you, then map feedback.message, feedback.email, and other fields to Slack, Jira, Notion, Google Sheets, etc.

Slack

Also available on the Unlimited plan. For a native Slack channel notification, create a Slack Incoming Webhook (pick the channel, copy the URL), then paste it into the Slack field and enable it. Each new feedback posts a formatted message with the text, visitor id, email, page, and sentiment when available.

Webhook and Slack fire in realtime alongside email and Telegram — independently of the email digest schedule.

Integration for developers (pure JavaScript)

Prefer to inject the widget programmatically — e.g. from a bundler, a framework, or conditionally? Append the script yourself:

const script = document.createElement("script");
script.setAttribute("src", "https://litefeedback.com/min.litefeedback.js");
script.setAttribute("lf69", "YOUR_DOMAIN_ID");
script.setAttribute("defer", "");
document.head.appendChild(script);

Works the same way as the one-line tag. In SPAs (React, Vue, etc.) inject it once on initial load — the widget persists across client-side navigation.

Identify your users (user id & email)

If your visitors are logged in, attach an identifier and/or email to their feedback so you know exactly who sent what. Set these global variables before the feedback is submitted:

// Set these BEFORE the visitor submits feedback.
// Both are optional and attached to the feedback so you know who sent it.

// A stable identifier for the logged-in user (id, username, etc.)
window.lite_feedback_user_id = "user_12345";

// Pre-fill the sender email. If the visitor types one in the popup,
// the typed email is used instead.
window.lite_feedback_user_email = "jane@example.com";
GlobalTypeBehavior
window.lite_feedback_user_idstringAttached to the feedback as the visitor identifier — shown in your dashboard and notifications.
window.lite_feedback_user_emailstringUsed as the sender email. If the visitor types an email in the popup, the typed one takes priority.

Both are optional. Set them as early as possible (e.g. right after login) so they're present whenever the visitor opens the widget.

Listen to events

When feedback is submitted successfully, the widget dispatches a lf69_msg_success event on document. Use it to trigger your own analytics, a thank-you flow, or a confetti animation:

document.addEventListener("lf69_msg_success", (e) => {
  console.log("Feedback sent:", e.detail.message, e.detail.email);
  // e.g. fire your own analytics event here
});

event.detail contains { message, email } for the submitted feedback.

REST API

Submit feedback programmatically from your backend or a mobile app — no widget required. Ideal for in-app feedback, crash reports, or piping feedback from other systems.

Endpoint

POST https://us-central1-easyfeedback-37932.cloudfunctions.net/addFeedbackFromAPI

Authentication

Send your secret API key as a Bearer token. Find and regenerate it in your dashboard under User settings → API key. Keep it server-side; never expose it in client code.

Authorization: Bearer YOUR_API_KEY

Request body

Send JSON. Only domain_id and message are required.

FieldTypeRequiredDescription
domain_idstringYesThe ID of the domain to attach the feedback to.
messagestringYesThe feedback content (max 5000 characters).
emailstringNoSender email (max 254 characters).
user_identifierstringNoYour own identifier for the visitor.
pathnamestringNoThe page/path the feedback relates to.
browserstringNoBrowser name.
osstringNoOperating system.
devicestringNoDevice name/type.
app_versionstringNoYour app version (mobile).
os_versionstringNoOS version (mobile).
device_modelstringNoDevice model (mobile).
mobile_user_idstringNoUser id from your mobile app.
timezonestringNoIANA timezone, e.g. Europe/Paris.
tagsstring[]NoUp to 20 tags.
extradataobjectNoAny extra JSON metadata.

Example — JavaScript (fetch)

fetch("https://us-central1-easyfeedback-37932.cloudfunctions.net/addFeedbackFromAPI", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer YOUR_API_KEY",
  },
  body: JSON.stringify({
    domain_id: "YOUR_DOMAIN_ID",   // required
    message: "The export button is broken on mobile", // required
    email: "jane@example.com",      // optional
    user_identifier: "user_12345",  // optional
    pathname: "/pricing",           // optional
    tags: ["bug"],                  // optional
    extradata: { plan: "pro" },     // optional
  }),
});

Example — cURL

curl -X POST "https://us-central1-easyfeedback-37932.cloudfunctions.net/addFeedbackFromAPI" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "domain_id": "YOUR_DOMAIN_ID",
    "message": "The export button is broken on mobile",
    "email": "jane@example.com"
  }'

Responses

// 200 OK
{ "success": true, "feedbackId": "f_abc123" }
StatusMeaning
200Feedback created — returns { success, feedbackId }.
400Missing domain_id / message, or a field is too long.
401Missing/invalid Authorization header or API key.
403Domain doesn't belong to you, or monthly feedback limit reached (Free plan).
405Wrong method — use POST.
429Rate limited — max 10 requests/minute per API key.
500Server error — try again.
AI triage: on the Unlimited plan, feedback submitted via the API is automatically tagged, status-assigned, and sentiment-scored by AI — just like widget feedback.

MCP server Unlimited

The Lite Feedback MCP server lets your coding assistant pull visitor feedback and work on it in your repo. In Cursor, Claude Code, or Codex you can say “Pull the last feedbacks from the project” then “Work on feedback #f_abc123” — the assistant gets the message, page, device, browser, tags, and a work brief.

Endpoint

POST https://us-central1-easyfeedback-37932.cloudfunctions.net/mcp

Authenticate with your MCP token as a Bearer token. Find it in your dashboard under User settings → MCP server (Unlimited plan). One token covers every website on the account.

Authorization: Bearer YOUR_MCP_TOKEN

Cursor

Paste this into .cursor/mcp.json in your project, or ~/.cursor/mcp.json for a global config. Restart Cursor afterwards.

// .cursor/mcp.json
{
  "mcpServers": {
    "litefeedback": {
      "url": "https://us-central1-easyfeedback-37932.cloudfunctions.net/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_TOKEN"
      }
    }
  }
}

Claude Code

Paste this into .mcp.json at the root of your project.

// .mcp.json
{
  "mcpServers": {
    "litefeedback": {
      "type": "http",
      "url": "https://us-central1-easyfeedback-37932.cloudfunctions.net/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_TOKEN"
      }
    }
  }
}

Codex

Add this to ~/.codex/config.toml.

# ~/.codex/config.toml
[mcp_servers.litefeedback]
url = "https://us-central1-easyfeedback-37932.cloudfunctions.net/mcp"
http_headers = { Authorization = "Bearer YOUR_MCP_TOKEN" }

Tools

ToolWhat it does
list_projectsList the websites on your account.
list_feedbacksPull recent feedback (optional filters: domain, status, tag).
get_feedbackLoad one item by ID, with a ready-to-work engineering brief.
search_feedbacksSearch messages, notes, emails, and page paths.
update_feedbackSet status, tags, priority, team notes, or archive after you start/finish.
Typical loop: list the latest bugs → open #f_… → implement in the current repo → mark it in_progress or done.

Privacy & GDPR

The widget sets no cookies and collects no personal data by default. It only sends what a visitor types plus basic technical context (page, browser, OS, timezone). Any user id or email is only attached if you set it (see Identify your users). This keeps integration friendly to GDPR and to your visitors.

Troubleshooting & FAQ

Do I need to add the script to every page?

Yes — but most platforms (WordPress, Shopify, Wix, Webflow, GTM…) let you add it once globally so it loads everywhere automatically.

Will it slow down my site?

No. The script is loaded with defer and runs after your page, so it never blocks rendering.

Can I use it on a mobile app?

Yes — use the REST API to submit feedback from any backend or native app.

Where is my domain ID / API key?

Your domain ID is in the install snippet (the lf69 value) in your dashboard. Your API key is in User settings.

Does it set cookies?

No cookies, and no personal data is collected unless you explicitly attach a user id or email.

Can I send feedback to Slack or Zapier?

Yes — on the Unlimited plan, enable the generic webhook or Slack integration under a domain's Notifications & Webhook settings. See the Notifications section for the JSON payload and setup steps.

Can my coding assistant pull feedback from Lite Feedback?

Yes — on the Unlimited plan, connect the MCP server in Cursor, Claude Code, or Codex. See the MCP section. Your token lives in User settings.