Purple Community API Documentation

Machine-readable OpenAPI 3.0 specification: https://marketplace.moveworks.com/api/purple-suite/community/openapi.json

The consolidated all-apps document at https://marketplace.moveworks.com/api/purple-suite/openapi.json can be narrowed to this app with ?apps=community, or combined with other apps comma-separated (e.g. ?apps=community,itsm).

Overview

--- **Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.

Endpoints

GET /api/purple-suite/community/feature-requests

List feature requests for a session

Returns the feature_requests array stored on the given session document. Public endpoint — no PAT required.

Parameters

NameInTypeRequiredDescription
sessionIdquerystringyesThe session document ID whose feature_requests array should be returned

Responses

200
Array of feature request objects stored on the session

application/json

array of:

LegacyFeatureRequest

  • id stringUnique identifier of the feature request within the session
  • current_status stringHuman-readable status mapped from newStatusNumber
400
sessionId query parameter is missing
404
Session not found

PATCH /api/purple-suite/community/feature-requests/{id}

Update the status of a session feature request

Maps newStatusNumber to a human-readable status string and writes it to current_status on the matching feature request in the session's feature_requests array.

Parameters

NameInTypeRequiredDescription
idpathstringyesThe id of the feature request inside the session's feature_requests array
sessionIdquerystringyesThe session document ID that owns the feature request

Request body

application/json — required

UpdateFeatureRequestStatusBody

  • newStatusNumber integer requiredStatus code to set. Mapping: 1=New, 2=Existing Functionality/Native Skill, 3=Future Consideration, 6=Not Enough Info to Make Decision, 7=On Roadmap, 8=Delivered, 9=Duplicate, 11=Limited Preview

Responses

200
Feature request updated

text/plain

string (example: "Feature request updated")

400
Missing required parameters or invalid newStatusNumber
404
Session or feature request not found

GET /api/purple-suite/community/feature_requests

List community feature requests (the customer product-ideas board)

Customer-submitted product ideas for this instance, with name, productArea (UI/UX, Performance, Security, Integrations, API, Analytics, Admin, Notifications), currentStatus New → Under Review → Planned → In Progress → Delivered/Declined, vote count, submitter and moderator. This is the public wish-list board — committed delivery plans live in the roadmap app and support tickets in itsm. Supports server-side OData querying — _filter, _orderby, _select, _search, _top, _skip, _count (the spec names these $filter etc.; MCP clients see the _ form because $ is not a legal tool-input key).

Parameters

NameInTypeRequiredDescription
X-Instance-IDheaderstringyes
limitqueryintegernoLegacy page size (default 50). Prefer $top. Ignored when $top/$skip are used.
cursorquerystringnoLegacy keyset cursor — pass the previous response's nextCursor. Prefer $skip/$top.
$filterquerystringnoOData filter expression. Comparison operators: eq, ne, gt, ge, lt, le. Logical: and, or, not, with parentheses for grouping. String functions: contains(field,'x'), startswith(field,'x'), endswith(field,'x'). Membership: field in ('a','b'). Case-insensitive matching via tolower(field) / toupper(field). Nested fields use a slash, e.g. pto_balance/vacation_days. String literals use single quotes; dates are ISO-8601. Examples: "status eq 'active'"; "salary gt 50000 and department eq 'Engineering'"; "contains(tolower(name),'acme')"; "closeDate gt 2026-01-01".
$selectquerystringnoComma-separated list of fields to return, e.g. "id,firstName,email". Nested fields via slash ("pto_balance/vacation_days"). The id field is always included.
$orderbyquerystringnoSort clause(s), comma-separated, each "field [asc|desc]" (asc is the default). Example: "createdAt desc, lastName asc". Null values sort last.
$searchquerystringnoFree-text, case-insensitive substring match across the resource's searchable fields.
$topqueryintegernoMaximum number of items to return (page size).
$skipqueryintegernoNumber of matching items to skip before returning results (offset paging). Combine with $top.
$countquerybooleannoWhen true, include @odata.count (total matches after $filter/$search, before paging) in the response.

Responses

200
Paginated list

application/json

  • data array

    array of:

    FeatureRequest

    • id string
    • name string
    • currentStatus string
    • createdBy string
    • moderator string
    • productArea string
    • votes integer
    • createdAt string
    • updatedAt string
  • nextCursor stringCursor for the next page, or null on the last page. With $top/$skip this is the next $skip value; otherwise a keyset cursor.
  • total integerTotal documents in the collection.
  • @odata.count integerPresent only when $count=true: total matches after $filter/$search.
  • @odata.truncated booleanPresent and true only when the collection exceeded the in-memory query cap and results may be incomplete.
400
Invalid OData query (e.g. malformed $filter)

POST /api/purple-suite/community/feature_requests

Submit a community feature request (new product idea)

Adds an idea to the community board with a name, product area, submitter and starting status. Use it for wish-list requests only — bugs and support issues belong in the itsm app.

Parameters

NameInTypeRequiredDescription
X-Instance-IDheaderstringyes

Request body

application/json — required

FeatureRequest

  • id string
  • name string
  • currentStatus string
  • createdBy string
  • moderator string
  • productArea string
  • votes integer
  • createdAt string
  • updatedAt string

Responses

201
Created

application/json

FeatureRequest

  • id string
  • name string
  • currentStatus string
  • createdBy string
  • moderator string
  • productArea string
  • votes integer
  • createdAt string
  • updatedAt string

GET /api/purple-suite/community/feature_requests/{id}

Get feature request

Parameters

NameInTypeRequiredDescription
X-Instance-IDheaderstringyes
idpathstringyes

Responses

200
Found

application/json

FeatureRequest

  • id string
  • name string
  • currentStatus string
  • createdBy string
  • moderator string
  • productArea string
  • votes integer
  • createdAt string
  • updatedAt string
404
Not found

DELETE /api/purple-suite/community/feature_requests/{id}

Delete feature request

Parameters

NameInTypeRequiredDescription
X-Instance-IDheaderstringyes
idpathstringyes

Responses

200
Deleted

application/json

  • success boolean
404
Not found

PATCH /api/purple-suite/community/feature_requests/{id}

Update a community feature request (triage status, votes, moderator)

Partial update of one idea on the board — most often moving currentStatus through triage (New → Under Review → Planned → In Progress → Delivered/Declined), incrementing votes, or assigning a moderator. Send only the fields you want to change.

Parameters

NameInTypeRequiredDescription
X-Instance-IDheaderstringyes
idpathstringyes

Request body

Fields to update (partial)

application/json

FeatureRequest

  • id string
  • name string
  • currentStatus string
  • createdBy string
  • moderator string
  • productArea string
  • votes integer
  • createdAt string
  • updatedAt string

Responses

200
Updated

application/json

FeatureRequest

  • id string
  • name string
  • currentStatus string
  • createdBy string
  • moderator string
  • productArea string
  • votes integer
  • createdAt string
  • updatedAt string
404
Not found