Submit feedback
Send user feedback to Feedstick from anywhere — a browser widget, your
backend, or a one-off script. A single authenticated POST
carrying the feedback text is all it takes. Rather not write it yourself?
Copy the Prompt tab below into Claude Code, Cursor, or any
coding agent and have it wire the integration for you.
curl -X POST https://a.feedstick.app/feedback \
-H "X-Feedstick-Key: pk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"content":"Love the new dashboard, but export is slow."}' import requests
requests.post(
"https://a.feedstick.app/feedback",
headers={"X-Feedstick-Key": "pk_live_xxxxxxxxxxxxxxxxxxxxxxxx"},
json={"content":"Love the new dashboard, but export is slow."},
) await fetch("https://a.feedstick.app/feedback", {
method: "POST",
headers: {
"X-Feedstick-Key": "pk_live_xxxxxxxxxxxxxxxxxxxxxxxx",
"Content-Type": "application/json",
},
body: JSON.stringify({"content":"Love the new dashboard, but export is slow."}),
}); package main
import (
"net/http"
"strings"
)
func main() {
req, _ := http.NewRequest("POST", "https://a.feedstick.app/feedback",
strings.NewReader(`{"content":"Love the new dashboard, but export is slow."}`))
req.Header.Set("X-Feedstick-Key", "pk_live_xxxxxxxxxxxxxxxxxxxxxxxx")
req.Header.Set("Content-Type", "application/json")
http.DefaultClient.Do(req)
} using System.Net.Http;
using System.Text;
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-Feedstick-Key", "pk_live_xxxxxxxxxxxxxxxxxxxxxxxx");
await client.PostAsync("https://a.feedstick.app/feedback",
new StringContent(@"{""content"":""Love the new dashboard, but export is slow.""}", Encoding.UTF8, "application/json")); Integrate Feedstick (a feedback ingest API) into my app.
Read the API reference at https://feedstick.app/docs first. Then add a way for users to submit feedback that sends a single HTTP POST to https://a.feedstick.app/feedback with:
- header X-Feedstick-Key: pk_live_xxxxxxxxxxxxxxxxxxxxxxxx (my public ingest key from https://f.feedstick.app — keep it in an env var)
- JSON body { "content": "<the user's message>" }
Optional body fields: type (feature · bug · feedback · support — omit to auto-classify), context (arbitrary JSON: page, app version, etc.), source_label, submitter_email.
Pass submitter_email whenever my app knows who the user is — it's what lets them be notified when their feedback is marked done.
Handle responses: 201 { id } success · 400 invalid · 401 bad key (don't retry) · 429 rate limited (back off using Retry-After).
Wire it into <where feedback should be collected in my app>. Request body
content req Feedback text (1–10,000 characters).
context Arbitrary JSON — page, app version, user agent, anything useful. Up to 16 KB serialized, nested at most 10 levels deep.
type feature · bug · feedback · support — omit to auto-classify.
source_label Free-text label for where the feedback came from (app name, marketing site, CLI, …). Truncated to 200 characters.
submitter_email Reporter's email, if you collect it. Required to notify them when the feedback is marked done; without it the submission is anonymous. Values that don't look like an email address (or exceed 254 characters) are ignored.
Responses
- 201 Created. Returns { id }.
- 400 Bad Request. Missing or oversized content (>10,000 chars), or an unrecognized type.
- 401 Unauthorized. Missing, unknown, or disabled X-Feedstick-Key.
- 413 Payload Too Large. Request body exceeds 64 KB.
- 429 Rate Limited. Too many requests for this app — back off using the Retry-After header.
pk_live_…
ingest key. Owners and admins copy it from the
dashboard; rotate or revoke it anytime. It only
grants write access to this one endpoint, so it's safe to ship in client
code.
Best practices
-
Send the key in the
X-Feedstick-Keyheader on every request — never in the URL or query string. - Ideally, put the key behind a backend endpoint in your app (e.g. a Next.js route handler) and call Feedstick from there, so it's never exposed to the client. Read it from an env var rather than hardcoding it.
-
No backend? Embedding the
pk_live_…key in client code is still fine — it's write-only and the endpoint has built-in spam protection, so a leaked key is low-risk. - If a key is ever abused or leaked, rotate it from the dashboard in one click — the old key stops working immediately.
-
Send
submitter_emailwhenever you have it — it's what lets you email the reporter when their feedback is marked done. Omit it and the submission is anonymous. -
Set
source_labelso each item shows where it came from (app, page, CLI) — no guessing the source. -
Attach anything useful in
context— it's freeform JSON (page URL, app version, user ID, plan tier, whatever helps you triage). Feedstick uses it to auto-tag and group related feedback. -
Set
type(feature · bug · feedback · support) to categorize instantly, or omit it to let Feedstick auto-classify. -
Handle errors: treat
401as an invalid or disabled key (don't retry), and on429back off using theRetry-Afterheader.