Appearance
feedback
11 endpoints at a glance
| Method | Path | Summary |
|---|---|---|
GET | /admin/feedback/ | Admin List Feedback |
GET | /admin/feedback/{thread_id}/ | Admin Get Thread |
POST | /admin/feedback/{thread_id}/reply | Admin Reply Thread |
POST | /admin/feedback/{thread_id}/status | Admin Set Status |
GET | /admin/feedback/stats/ | Admin Feedback Stats |
POST | /feedback/ | Submit Feedback |
GET | /feedback/mine/ | List My Feedback |
GET | /feedback/mine/{thread_id}/ | Get My Thread |
POST | /feedback/mine/{thread_id}/read | Mark My Thread Read |
POST | /feedback/mine/{thread_id}/reply | Reply To My Thread |
GET | /feedback/unread-count/ | Feedback Unread Count |
feedback
Submit Feedback
POST
/feedback/
Submit feedback. Anonymous is allowed but one-way (stored +
shown to admins, no reply path). Logged-in starts a two-way
thread. Rate-limited per username / client IP.
Parameters
Header Parameters
authorization
x-api-key
Request Body
application/json
JSON "message": "string", "subject": "string", "page_url": "string", "context": { "additionalProperties": "string" }
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Feedback Unread Count
List My Feedback
Get My Thread
GET
/feedback/mine/{thread_id}/
One of the caller's threads (marks it user-read). 404 when it
isn't theirs / doesn't exist.
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
thread_id*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Reply To My Thread
Mark My Thread Read
Admin List Feedback
Admin Feedback Stats
GET
/admin/feedback/stats/
{by_status, total, admin_unread} — admin-nav badge +
panel header. Declared before /admin/feedback/{thread_id}/ so
stats isn't captured as a thread id.
Parameters
Header Parameters
authorization
x-api-key
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Admin Get Thread
Admin Reply Thread
POST
/admin/feedback/{thread_id}/reply
Reply as admin (→ status answered). 400 on an anonymous
thread (no reply path) or a missing one.
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
thread_id*
Type
Requiredstring
Request Body
application/json
JSON "message": "string"
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}