Feedback

Submit, list, fetch, and delete feedback items.

POST/api/v1/feedbacksecret or widget key

Submit a feedback item

Returns 202 immediately with the item id; PII redaction happens before storage, and AI analysis (sentiment, type, emotions, language, clustering) completes asynchronously within seconds.

ParameterInDescription
textrequiredbodyThe feedback text, 1–10,000 chars.
userIdbodyYour identifier for the end user (enables segments + GDPR endpoints).
emailbodyThe author's email, when userId is unknown (survey tools, help desks). Feedback joins the matching user — or creates one, merged automatically once that person is identified with their real userId.
sourcebody"api" (default) or "widget".
metadatabodyCustom properties as JSON ≤8 KB — where the feedback came from, which experiment it belongs to ({"widget": "checkout", "test": "paywall-v2"}, …). Every key becomes a filter and a chart breakdown in Reports, and works with ?meta= below.
createdAtbodyISO timestamp for backfills; defaults to now.
Idempotency-KeyheaderMakes retries safe (see Overview → Idempotency).
Request
curl -X POST https://app.sentriment.com/api/v1/feedback \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-4231-note" \
  -d '{
    "text": "Checkout freezes when I apply a coupon",
    "userId": "usr_123",
    "email": "dana@acme.com",
    "metadata": { "plan": "pro", "page": "/checkout" }
  }'
202 Accepted
{ "id": "01KX8VPHE0XN0JCDM6GSRC5HDQ", "status": "pending" }
GET/api/v1/feedbacksecret key

List feedback

Newest first, with analysis fields. Cursor pagination via nextBefore.

ParameterInDescription
limitquery1–200, default 50.
clusterqueryFilter to one cluster id.
sentimentquerypositive · neutral · negative.
sourcequeryapi · widget · csv · appstore · intercom · zendesk.
metaquerykey:value on custom properties, e.g. ?meta=test:paywall-v2. Repeatable: the same key matches either value (?meta=tier:pro&meta=tier:free), different keys must all match.
beforequeryCursor — pass the previous response's nextBefore.
Request
curl "https://app.sentriment.com/api/v1/feedback?limit=50&sentiment=negative" \
  -H "Authorization: Bearer sk_live_…"
200 OK (truncated)
{
  "items": [{
    "id": "01KX…", "text": "search is timing out again …",
    "sentiment": "negative", "sentimentScore": -0.62,
    "type": "bug", "emotions": ["frustration"], "language": "en",
    "clusterId": "01KX…", "userId": "u301", "status": "processed",
    "createdAt": "2026-07-11T18:09:05.000Z"
  }],
  "nextBefore": "2026-07-11T18:09:05.000Z"
}
GET/api/v1/feedback/{id}secret key

Get one item

Full analysis for a single item — poll this after a 202 if you need the result synchronously.

Request
curl "https://app.sentriment.com/api/v1/feedback/01KX8VPHE0XN0JCDM6GSRC5HDQ" \
  -H "Authorization: Bearer sk_live_…"
DELETE/api/v1/feedback/{id}secret key

Delete one item

Hard delete. Cluster statistics are recomputed immediately. Returns 204; deleting twice returns 404.

Request
curl -X DELETE "https://app.sentriment.com/api/v1/feedback/01KX8VPHE0XN0JCDM6GSRC5HDQ" \
  -H "Authorization: Bearer sk_live_…"
Was this page helpful?