REST API
One endpoint for taking feedback in. Authentication through the public project key, which may only write.
Request
POST /api/v1/feedback
Content-Type: application/json
X-Tellstack-Key: ts_live_…
{
"message": "PDF export gets stuck on large files",
"category": "bug",
"email": "anna@example.com",
"userId": "usr_123",
"metadata": {
"url": "https://app.example.com/export",
"appVersion": "1.4.2",
"platform": "ios",
"device": "iPhone 15",
"locale": "de-AT",
"custom": { "plan": "pro" }
}
}The key may also come as Authorization: Bearer … or as the query parameter ?key=.
Fields
- message
- Required. 2 to 5,000 characters. Stored unchanged.
- category
- Optional. bug, idea, question or other.
- Optional. Makes a reply by email possible.
- userId
- Optional. Your own user id, max. 80 characters.
- metadata
- Optional. url, appVersion, platform, device, locale and custom.
Responses
HTTP/1.1 201 Created
{ "id": "…", "status": "new", "createdAt": "2026-08-19T09:12:44.101Z" }HTTP/1.1 400 Bad Request
{
"error": {
"code": "validation_error",
"message": "Input is invalid.",
"details": { "issues": [{ "path": "message", "message": "Message is too short." }] }
}
}- 201
- Accepted.
- 400
- validation_error — a field is missing or not allowed.
- 401
- unauthorized — key missing or invalid.
- 403
- forbidden — monthly quota used up or workspace blocked.
- 413
- payload_too_large — more than 64 KB.
- 429
- rate_limited — more than 120 requests per minute per key.
Hosted forms
GET /api/v1/forms/:slug Configuration of the form
POST /api/v1/forms/:slug/submit SubmissionThese endpoints need no key — the slug is enough. They are meant for your own interfaces that want the same configuration as the hosted page.
What the key cannot do
Read. There is no way to fetch feedback, see projects or change settings with a project key. Everything that reads hangs off a signed-in session and is limited to the workspace.