Feedback
Collect product feedback from your customers. Each submission is analyzed by AI into a one-line insight — a pain point, feature request, or praise — visible in the Tether dashboard.
Submit feedback
POST/api/v1/feedback
Submits a feedback item for a product. The product is determined by the API key. If a customer identifier is provided and matches an existing customer, the feedback is linked to that customer record.
Requires a product-scoped API key. AI insight extraction runs asynchronously after the request returns.
Request body
| Name | Type | Required | Description |
|---|---|---|---|
| text | string (required) | optional | The feedback text. Max 5,000 characters. |
| customer_email | string | optional | Optional. Email address used to link this feedback to an existing customer record. |
| customer_external_id | string | optional | Optional. Your system's identifier for the customer. Takes precedence over customer_email when linking to a customer record. |
Example request
async function request(data: Record<string, unknown>) {
const response = await fetch("https://usetether.io/api/v1/feedback", {
method: "POST",
headers: {
Authorization: `Bearer ${import.meta.env.VITE_TETHER_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
text: "It would be great to export reports as CSV.",
customer_email: "jane@acme.com",
customer_external_id: "cus_abc123",
}),
});
return response.json();
}Response — success (201)
1{
2 "id": "a1b2c3d4-...",
3 "status": "received",
4 "message": "Feedback received. Insights will be available shortly."
5}Rate limiting
Submissions are rate-limited to 100 per product per hour. When the limit is exceeded the API returns a 429 response:
1{
2 "error": "Rate limit exceeded. Try again later.",
3 "code": "RATE_LIMITED",
4 "retry_after_seconds": 3540
5}