Skip to content

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:

json
{
  "type": "global",
  "id": null
}

Allowed scope types:

  • global
  • server
  • network
  • service
  • extension

For non-global scopes, id is required and must be the target entity ID.

Permissions

The feedback endpoints use these permission nodes:

  • feedback:read
  • feedback:write
  • feedback: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, DECLINED
  • limit (optional, max 500)

Response:

json
{
  "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

json
{
  "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}

json
{
  "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}