Submit tester feedback
Authenticate the tester key, reserve one rate-limit admission, validate and persist the record, then attempt mesh publication. Tester identity comes from the provisioned key record, not the request body. Raw diagnostics are not echoed in the response.
FeedbackKeyAuthorizationBearer <token>Provisioned tester key. The bearer scheme is case-insensitive; the key is trimmed.
application/json- body
Strings are trimmed before length checks. Empty or null optional strings are omitted. Unknown properties are discarded. client and diagnostics accept arbitrary JSON.
origin*string"human""agent"type*string"bug""idea""friction""praise""other"summary*string1 <= length <= 300severity?string"low""medium""high"client?unknowndiagnostics?unknowndetails?|length <= 10000area?|length <= 120repro?|length <= 10000expected?|length <= 5000actual?|length <= 5000source?|length <= 40Stored feedback. published reports whether mesh publication was confirmed.
application/json- response
ok*unknownid*stringuuidpublished*booleancurl -X POST 'http://127.0.0.1:8787/v1/feedback' \ -H 'Content-Type: application/json' \ -d '{ "origin": "human", "type": "friction", "summary": "The setup command did not explain the missing broker.", "severity": "low"}'{ "ok": true, "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "published": true}See the HTTP interface overview for authentication and access requirements.
Complete HTTP contract
Endpoint
POST /v1/feedbackAuthenticate the tester key, reserve one rate-limit admission, validate and persist the record, then attempt mesh publication. Tester identity comes from the provisioned key record, not the request body. Raw diagnostics are not echoed in the response.
Parameters
No operation parameters.
Request body
The request uses the schema below.
Required: yes.
Content type: application/json.
{
"$ref": "#/components/schemas/Feedback"
}Example:
{
"origin": "human",
"type": "friction",
"summary": "The setup command did not explain the missing broker.",
"severity": "low"
}Responses
HTTP 202
Stored feedback. published reports whether mesh publication was confirmed.
Content type: application/json.
{
"type": "object",
"properties": {
"ok": {
"const": true
},
"id": {
"type": "string",
"format": "uuid"
},
"published": {
"type": "boolean"
}
},
"required": [
"ok",
"id",
"published"
],
"additionalProperties": false
}HTTP 400
Malformed JSON or invalid fields.
Content type: application/json.
{
"$ref": "#/components/schemas/Error"
}HTTP 401
Missing or invalid tester key.
Content type: application/json.
{
"$ref": "#/components/schemas/Error"
}HTTP 413
Feedback body exceeds the configured byte limit.
Content type: application/json.
{
"$ref": "#/components/schemas/Error"
}HTTP 429
Tester exceeded the configured fixed-minute admission limit.
Content type: application/json.
{
"$ref": "#/components/schemas/Error"
}HTTP 500
Unexpected intake failure.
Content type: application/json.
{
"$ref": "#/components/schemas/Error"
}Authentication and access: HTTP interface of the reference feedback intake service. The default listener is 127.0.0.1:8787 and the operator can configure host and port. Health is unauthenticated. Feedback requires a provisioned tester key. The service persists an accepted record before publishing it to the feedback channel. A 202 with published false still means the record was stored. This implementation reference does not establish a hosted public feedback product.
The body limit defaults to 65536 bytes and is configurable with --max-bytes. The rate limit defaults to 30 authenticated admissions per tester per fixed minute, configurable with --rate-limit. Failed body validation still consumes an admission. Query strings are accepted because dispatch uses the URL pathname. Unknown paths and methods return JSON 404. The handler does not enforce Content-Type or Origin and sends no CORS promise.
OpenAPI specification contains the referenced response schemas. Complete Markdown reference.