Feedback
Feedback entries are scoped to a target (global, server, network, service, or extension). Each entry is gated by permissions and scoped roles.
Scope object
Every feedback entry carries a scope object:
{
"type": "global",
"id": null
}Allowed scope types:
globalservernetworkserviceextension
For non-global scopes, id is required and must be the target entity ID.
Permissions
The feedback endpoints use these permission nodes:
feedback:readfeedback:writefeedback:edit
Scopes are evaluated against scoped roles (matching scope + scopeId) and the default role for that scope. Global permissions still grant access across scopes.
List feedback
GET /v1/feedback?scope=global&scopeId=<id>&status=OPEN&limit=250
Query params:
scope(required)scopeId(required for non-global)status(optional):OPEN,ACKNOWLEDGED,IN_PROGRESS,RESOLVED,DECLINEDlimit(optional, max 500)
Response:
{
"items": [
{
"id": "...",
"scope": { "type": "server", "id": "..." },
"type": "GENERAL",
"title": "...",
"description": "...",
"category": "...",
"targetContext": "...",
"targetUserId": "...",
"reporterId": "...",
"reporterName": "...",
"assignedUserId": "...",
"assignedUserName": "...",
"labels": ["..."],
"status": "OPEN",
"severity": "HIGH",
"resolutionNote": "...",
"createdAt": "...",
"updatedAt": "...",
"acknowledgedAt": "...",
"resolvedAt": "..."
}
]
}Create feedback
POST /v1/feedback
{
"scope": { "type": "network", "id": "<networkId>" },
"type": "GENERAL",
"authorId": "<user-id>",
"title": "Missing banner",
"description": "...",
"category": "UX",
"targetContext": "banner detail",
"severity": "LOW",
"labels": ["ui", "banner"],
"targetUserId": "<optional-user-id>"
}Server-authenticated feedback (Connect server credentials) must include authorId and the scope must match the server or network id associated with the Connect server.
Update feedback
PATCH /v1/feedback/{feedbackId}
{
"status": "IN_PROGRESS",
"severity": "MEDIUM",
"labels": ["triage"],
"category": "API",
"targetContext": "profile lookup",
"resolutionNote": "Investigating",
"assignedUserId": "<user-id>"
}Get feedback by id
GET /v1/feedback/{feedbackId}