Introduction
Loop is a developer feedback platform to collect, triage, and act on user feedback with an SDK, a drop-in widget, and signed real-time webhooks.
What is Loop?
Loop is a feedback platform built for developers. It gives you everything you need to collect, triage, and act on user feedback without stitching together forms, spreadsheets, and ad-hoc scripts. Send feedback through a typed SDK, drop a widget into your app, and react to changes in real time through signed webhooks.
Every piece of feedback becomes a structured feedback item you can query, filter, and route — from a one-line bug report to a glowing review.
Core concepts
A feedback item is the central object in Loop. It has a stable shape across every SDK and the REST API:
| Field | Type | Description |
|---|---|---|
id |
string | Unique identifier, e.g. fb_3a91 |
user |
object | The end user who submitted it (user.id) |
message |
string | The feedback text |
sentiment |
positive | neutral | negative |
How the user feels |
source |
string | Where it came from, e.g. in-app-widget |
tag |
string | Optional label for routing and triage |
status |
open | resolved |
Triage state |
createdAt |
string (ISO 8601) | When it was created |
How the pieces fit together
Loop is made of three layers that share the same data model:
- SDK — typed clients for JavaScript/TypeScript, Python, and Go. Create and query feedback from your backend or scripts.
- Drop-in widget — a small embed that collects feedback from inside your app and forwards it to your account as
source: 'in-app-widget'. - Signed webhooks — real-time, HMAC-signed events (
feedback.created,feedback.resolved) delivered to your endpoint with automatic retries and exactly-once delivery.
A typical flow looks like this:
- A user submits feedback through the widget or your own UI.
- Loop stores it as a feedback item and assigns sentiment and a stable
id. - A
feedback.createdwebhook fires to your endpoint. - Your team triages it — adding tags, then marking it
resolved.
A first taste
Here is the smallest possible example of creating a feedback item with the SDK:
import { Loop } from '@loop/sdk';
const loop = new Loop(process.env.LOOP_API_KEY);
await loop.feedback.create({
user: { id: 'u_8f2c' },
message: 'The new export flow is much faster, thank you!',
sentiment: 'positive',
source: 'in-app-widget',
});
That single call validates your API key, stores the item, and triggers any webhooks you have configured — no extra wiring required.
Plans
Loop offers three plans so you can start small and scale as your feedback volume grows:
| Plan | Included volume | Best for |
|---|---|---|
| Free | 1,000 items / month | Side projects and early-stage products |
| Pro | Higher monthly quota | Growing teams with steady feedback volume |
| Scale | Highest quota + SLA | High-traffic apps and large organizations |
You can start on Free with no credit card and upgrade when you approach your monthly item limit.
Where to go next
- Quickstart — install the SDK and send your first feedback item in minutes.
- Authentication — manage API keys and authenticate requests.
- Feedback API — the full reference for creating and listing feedback.
- Webhooks — receive and verify signed real-time events.
- SDKs — install and use the JavaScript, Python, and Go clients.
Loop stays out of your way: a small, predictable surface area so you can spend your time acting on feedback instead of plumbing it.