Purple Pages API Documentation
Machine-readable OpenAPI 3.0 specification: https://marketplace.moveworks.com/api/purple-suite/pages/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=pages, or combined with other apps comma-separated (e.g. ?apps=pages,itsm).
Overview
Endpoints
GET /api/purple-suite/pages/pages
List wiki pages in the Purple Pages workspace
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
limit | query | integer | no | Legacy page size (default 50). Prefer $top. Ignored when $top/$skip are used. |
cursor | query | string | no | Legacy keyset cursor — pass the previous response's nextCursor. Prefer $skip/$top. |
$filter | query | string | no | OData 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". |
$select | query | string | no | Comma-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. |
$orderby | query | string | no | Sort clause(s), comma-separated, each "field [asc|desc]" (asc is the default). Example: "createdAt desc, lastName asc". Null values sort last. |
$search | query | string | no | Free-text, case-insensitive substring match across the resource's searchable fields. |
$top | query | integer | no | Maximum number of items to return (page size). |
$skip | query | integer | no | Number of matching items to skip before returning results (offset paging). Combine with $top. |
$count | query | boolean | no | When true, include @odata.count (total matches after $filter/$search, before paging) in the response. |
Responses
200- Paginated list
application/jsondataarrayarray of:
Pageidstringparent_idstring — ID of the parent page for nested page hierarchy; null for a top-level page. Reparent via POST /pages/{id}/move.titlestringemojistringcreatedBystringlastEditedAtstring — ISO-8601 timestamp of the last edit; set by the client (not auto-managed by the server)sharedbooleansharedWitharrayarray of:
string
permissionsstringcontentarray — Rich-text block content of the pageRich-text block content of the pagearray of:
PageBlockidstring — Block UUIDtypestringpropsobjecttextColorstringbackgroundColorstringtextAlignmentstringlevelinteger — Heading level (1–3), present only on heading blocks
contentarrayarray of:
typestringtextstringstylesobject
childrenarray — Nested child blocksNested child blocksarray of:
createdAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last page. With $top/$skip this is the next $skip value; otherwise a keyset cursor.totalinteger — Total documents in the collection.@odata.countinteger — Present only when $count=true: total matches after $filter/$search.@odata.truncatedboolean — Present 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/pages/pages
Create a wiki page
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
Page
idstringparent_idstring — ID of the parent page for nested page hierarchy; null for a top-level page. Reparent via POST /pages/{id}/move.titlestringemojistringcreatedBystringlastEditedAtstring — ISO-8601 timestamp of the last edit; set by the client (not auto-managed by the server)sharedbooleansharedWitharrayarray of:
string
permissionsstringcontentarray — Rich-text block content of the pageRich-text block content of the pagearray of:
PageBlockidstring — Block UUIDtypestringpropsobjecttextColorstringbackgroundColorstringtextAlignmentstringlevelinteger — Heading level (1–3), present only on heading blocks
contentarrayarray of:
typestringtextstringstylesobject
childrenarray — Nested child blocksNested child blocksarray of:
createdAtstringupdatedAtstring
Responses
201- Created
application/jsonPageidstringparent_idstring — ID of the parent page for nested page hierarchy; null for a top-level page. Reparent via POST /pages/{id}/move.titlestringemojistringcreatedBystringlastEditedAtstring — ISO-8601 timestamp of the last edit; set by the client (not auto-managed by the server)sharedbooleansharedWitharrayarray of:
string
permissionsstringcontentarray — Rich-text block content of the pageRich-text block content of the pagearray of:
PageBlockidstring — Block UUIDtypestringpropsobjecttextColorstringbackgroundColorstringtextAlignmentstringlevelinteger — Heading level (1–3), present only on heading blocks
contentarrayarray of:
typestringtextstringstylesobject
childrenarray — Nested child blocksNested child blocksarray of:
createdAtstringupdatedAtstring
GET /api/purple-suite/pages/pages/{id}
Get one wiki page with its content
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonPageidstringparent_idstring — ID of the parent page for nested page hierarchy; null for a top-level page. Reparent via POST /pages/{id}/move.titlestringemojistringcreatedBystringlastEditedAtstring — ISO-8601 timestamp of the last edit; set by the client (not auto-managed by the server)sharedbooleansharedWitharrayarray of:
string
permissionsstringcontentarray — Rich-text block content of the pageRich-text block content of the pagearray of:
PageBlockidstring — Block UUIDtypestringpropsobjecttextColorstringbackgroundColorstringtextAlignmentstringlevelinteger — Heading level (1–3), present only on heading blocks
contentarrayarray of:
typestringtextstringstylesobject
childrenarray — Nested child blocksNested child blocksarray of:
createdAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/pages/pages/{id}
Delete a wiki page
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Deleted
application/jsonsuccessboolean
404- Not found
PATCH /api/purple-suite/pages/pages/{id}
Edit a wiki page's title, content or sharing
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
Page
idstringparent_idstring — ID of the parent page for nested page hierarchy; null for a top-level page. Reparent via POST /pages/{id}/move.titlestringemojistringcreatedBystringlastEditedAtstring — ISO-8601 timestamp of the last edit; set by the client (not auto-managed by the server)sharedbooleansharedWitharrayarray of:
string
permissionsstringcontentarray — Rich-text block content of the pageRich-text block content of the pagearray of:
PageBlockidstring — Block UUIDtypestringpropsobjecttextColorstringbackgroundColorstringtextAlignmentstringlevelinteger — Heading level (1–3), present only on heading blocks
contentarrayarray of:
typestringtextstringstylesobject
childrenarray — Nested child blocksNested child blocksarray of:
createdAtstringupdatedAtstring
Responses
200- Updated
application/jsonPageidstringparent_idstring — ID of the parent page for nested page hierarchy; null for a top-level page. Reparent via POST /pages/{id}/move.titlestringemojistringcreatedBystringlastEditedAtstring — ISO-8601 timestamp of the last edit; set by the client (not auto-managed by the server)sharedbooleansharedWitharrayarray of:
string
permissionsstringcontentarray — Rich-text block content of the pageRich-text block content of the pagearray of:
PageBlockidstring — Block UUIDtypestringpropsobjecttextColorstringbackgroundColorstringtextAlignmentstringlevelinteger — Heading level (1–3), present only on heading blocks
contentarrayarray of:
typestringtextstringstylesobject
childrenarray — Nested child blocksNested child blocksarray of:
createdAtstringupdatedAtstring
404- Not found
GET /api/purple-suite/pages/databases
List structured databases in Purple Pages
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
limit | query | integer | no | Legacy page size (default 50). Prefer $top. Ignored when $top/$skip are used. |
cursor | query | string | no | Legacy keyset cursor — pass the previous response's nextCursor. Prefer $skip/$top. |
$filter | query | string | no | OData 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". |
$select | query | string | no | Comma-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. |
$orderby | query | string | no | Sort clause(s), comma-separated, each "field [asc|desc]" (asc is the default). Example: "createdAt desc, lastName asc". Null values sort last. |
$search | query | string | no | Free-text, case-insensitive substring match across the resource's searchable fields. |
$top | query | integer | no | Maximum number of items to return (page size). |
$skip | query | integer | no | Number of matching items to skip before returning results (offset paging). Combine with $top. |
$count | query | boolean | no | When true, include @odata.count (total matches after $filter/$search, before paging) in the response. |
Responses
200- Paginated list
application/jsondataarrayarray of:
DatabaseidstringnamestringcreatedBystringviewTypestringschemaarray — Ordered list of column/property namesOrdered list of column/property namesarray of:
string
sharedbooleansharedWitharrayarray of:
string
permissionsstringcreatedAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last page. With $top/$skip this is the next $skip value; otherwise a keyset cursor.totalinteger — Total documents in the collection.@odata.countinteger — Present only when $count=true: total matches after $filter/$search.@odata.truncatedboolean — Present 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/pages/databases
Create a structured database
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
Database
idstringnamestringcreatedBystringviewTypestringschemaarray — Ordered list of column/property namesOrdered list of column/property namesarray of:
string
sharedbooleansharedWitharrayarray of:
string
permissionsstringcreatedAtstringupdatedAtstring
Responses
201- Created
application/jsonDatabaseidstringnamestringcreatedBystringviewTypestringschemaarray — Ordered list of column/property namesOrdered list of column/property namesarray of:
string
sharedbooleansharedWitharrayarray of:
string
permissionsstringcreatedAtstringupdatedAtstring
GET /api/purple-suite/pages/databases/{id}
Get one database definition
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonDatabaseidstringnamestringcreatedBystringviewTypestringschemaarray — Ordered list of column/property namesOrdered list of column/property namesarray of:
string
sharedbooleansharedWitharrayarray of:
string
permissionsstringcreatedAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/pages/databases/{id}
Delete a structured database
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Deleted
application/jsonsuccessboolean
404- Not found
PATCH /api/purple-suite/pages/databases/{id}
Update a database's name, view or schema
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
Database
idstringnamestringcreatedBystringviewTypestringschemaarray — Ordered list of column/property namesOrdered list of column/property namesarray of:
string
sharedbooleansharedWitharrayarray of:
string
permissionsstringcreatedAtstringupdatedAtstring
Responses
200- Updated
application/jsonDatabaseidstringnamestringcreatedBystringviewTypestringschemaarray — Ordered list of column/property namesOrdered list of column/property namesarray of:
string
sharedbooleansharedWitharrayarray of:
string
permissionsstringcreatedAtstringupdatedAtstring
404- Not found
GET /api/purple-suite/pages/db-records
List rows inside Purple Pages databases
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
limit | query | integer | no | Legacy page size (default 50). Prefer $top. Ignored when $top/$skip are used. |
cursor | query | string | no | Legacy keyset cursor — pass the previous response's nextCursor. Prefer $skip/$top. |
$filter | query | string | no | OData 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". |
$select | query | string | no | Comma-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. |
$orderby | query | string | no | Sort clause(s), comma-separated, each "field [asc|desc]" (asc is the default). Example: "createdAt desc, lastName asc". Null values sort last. |
$search | query | string | no | Free-text, case-insensitive substring match across the resource's searchable fields. |
$top | query | integer | no | Maximum number of items to return (page size). |
$skip | query | integer | no | Number of matching items to skip before returning results (offset paging). Combine with $top. |
$count | query | boolean | no | When true, include @odata.count (total matches after $filter/$search, before paging) in the response. |
databaseId | query | string | no | Filter records by parent database ID. When omitted all records across all databases are returned. |
Responses
200- Paginated list
application/jsondataarrayarray of:
DbRecordA single row/record inside a Purple Pages database. The shape of user-defined fields (e.g. status, owner, priority) mirrors the database schema and varies per database type.idstringdatabaseIdstring — ID of the parent Database documenttitlestring — Primary title / name of the recordstatusstringownerstring — Owner email or name (present on Project Tracker records)dueDatestringprioritystring — Priority flag (present on Project Tracker records)severitystring — Severity level (present on Bug Tracker records)assigneestring — Assignee email (present on Bug Tracker records)componentstring — Affected component (present on Bug Tracker records)authorstring — Content author email (present on Content Calendar records)publishDatestring — Scheduled publish date (present on Content Calendar records)channelstring — Distribution channel (present on Content Calendar records)categorystring — Vendor category (present on Vendor Directory records)contactstring — Vendor contact email (present on Vendor Directory records)contractStatusstring — Contract status (present on Vendor Directory records)annualValuestring — Annual contract value string (present on Vendor Directory records)createdAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last page. With $top/$skip this is the next $skip value; otherwise a keyset cursor.totalinteger — Total documents in the collection.@odata.countinteger — Present only when $count=true: total matches after $filter/$search.@odata.truncatedboolean — Present 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/pages/db-records
Add a row to a Purple Pages database
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
DbRecord
idstringdatabaseIdstring — ID of the parent Database documenttitlestring — Primary title / name of the recordstatusstringownerstring — Owner email or name (present on Project Tracker records)dueDatestringprioritystring — Priority flag (present on Project Tracker records)severitystring — Severity level (present on Bug Tracker records)assigneestring — Assignee email (present on Bug Tracker records)componentstring — Affected component (present on Bug Tracker records)authorstring — Content author email (present on Content Calendar records)publishDatestring — Scheduled publish date (present on Content Calendar records)channelstring — Distribution channel (present on Content Calendar records)categorystring — Vendor category (present on Vendor Directory records)contactstring — Vendor contact email (present on Vendor Directory records)contractStatusstring — Contract status (present on Vendor Directory records)annualValuestring — Annual contract value string (present on Vendor Directory records)createdAtstringupdatedAtstring
Responses
201- Created
application/jsonDbRecordA single row/record inside a Purple Pages database. The shape of user-defined fields (e.g. status, owner, priority) mirrors the database schema and varies per database type.idstringdatabaseIdstring — ID of the parent Database documenttitlestring — Primary title / name of the recordstatusstringownerstring — Owner email or name (present on Project Tracker records)dueDatestringprioritystring — Priority flag (present on Project Tracker records)severitystring — Severity level (present on Bug Tracker records)assigneestring — Assignee email (present on Bug Tracker records)componentstring — Affected component (present on Bug Tracker records)authorstring — Content author email (present on Content Calendar records)publishDatestring — Scheduled publish date (present on Content Calendar records)channelstring — Distribution channel (present on Content Calendar records)categorystring — Vendor category (present on Vendor Directory records)contactstring — Vendor contact email (present on Vendor Directory records)contractStatusstring — Contract status (present on Vendor Directory records)annualValuestring — Annual contract value string (present on Vendor Directory records)createdAtstringupdatedAtstring
GET /api/purple-suite/pages/db-records/{id}
Get one database row
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonDbRecordA single row/record inside a Purple Pages database. The shape of user-defined fields (e.g. status, owner, priority) mirrors the database schema and varies per database type.idstringdatabaseIdstring — ID of the parent Database documenttitlestring — Primary title / name of the recordstatusstringownerstring — Owner email or name (present on Project Tracker records)dueDatestringprioritystring — Priority flag (present on Project Tracker records)severitystring — Severity level (present on Bug Tracker records)assigneestring — Assignee email (present on Bug Tracker records)componentstring — Affected component (present on Bug Tracker records)authorstring — Content author email (present on Content Calendar records)publishDatestring — Scheduled publish date (present on Content Calendar records)channelstring — Distribution channel (present on Content Calendar records)categorystring — Vendor category (present on Vendor Directory records)contactstring — Vendor contact email (present on Vendor Directory records)contractStatusstring — Contract status (present on Vendor Directory records)annualValuestring — Annual contract value string (present on Vendor Directory records)createdAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/pages/db-records/{id}
Delete a database row
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Deleted
application/jsonsuccessboolean
404- Not found
PATCH /api/purple-suite/pages/db-records/{id}
Update fields on a database row
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
DbRecord
idstringdatabaseIdstring — ID of the parent Database documenttitlestring — Primary title / name of the recordstatusstringownerstring — Owner email or name (present on Project Tracker records)dueDatestringprioritystring — Priority flag (present on Project Tracker records)severitystring — Severity level (present on Bug Tracker records)assigneestring — Assignee email (present on Bug Tracker records)componentstring — Affected component (present on Bug Tracker records)authorstring — Content author email (present on Content Calendar records)publishDatestring — Scheduled publish date (present on Content Calendar records)channelstring — Distribution channel (present on Content Calendar records)categorystring — Vendor category (present on Vendor Directory records)contactstring — Vendor contact email (present on Vendor Directory records)contractStatusstring — Contract status (present on Vendor Directory records)annualValuestring — Annual contract value string (present on Vendor Directory records)createdAtstringupdatedAtstring
Responses
200- Updated
application/jsonDbRecordA single row/record inside a Purple Pages database. The shape of user-defined fields (e.g. status, owner, priority) mirrors the database schema and varies per database type.idstringdatabaseIdstring — ID of the parent Database documenttitlestring — Primary title / name of the recordstatusstringownerstring — Owner email or name (present on Project Tracker records)dueDatestringprioritystring — Priority flag (present on Project Tracker records)severitystring — Severity level (present on Bug Tracker records)assigneestring — Assignee email (present on Bug Tracker records)componentstring — Affected component (present on Bug Tracker records)authorstring — Content author email (present on Content Calendar records)publishDatestring — Scheduled publish date (present on Content Calendar records)channelstring — Distribution channel (present on Content Calendar records)categorystring — Vendor category (present on Vendor Directory records)contactstring — Vendor contact email (present on Vendor Directory records)contractStatusstring — Contract status (present on Vendor Directory records)annualValuestring — Annual contract value string (present on Vendor Directory records)createdAtstringupdatedAtstring
404- Not found
GET /api/purple-suite/pages/comments
List comments left on wiki pages
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
limit | query | integer | no | Legacy page size (default 50). Prefer $top. Ignored when $top/$skip are used. |
cursor | query | string | no | Legacy keyset cursor — pass the previous response's nextCursor. Prefer $skip/$top. |
$filter | query | string | no | OData 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". |
$select | query | string | no | Comma-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. |
$orderby | query | string | no | Sort clause(s), comma-separated, each "field [asc|desc]" (asc is the default). Example: "createdAt desc, lastName asc". Null values sort last. |
$search | query | string | no | Free-text, case-insensitive substring match across the resource's searchable fields. |
$top | query | integer | no | Maximum number of items to return (page size). |
$skip | query | integer | no | Number of matching items to skip before returning results (offset paging). Combine with $top. |
$count | query | boolean | no | When true, include @odata.count (total matches after $filter/$search, before paging) in the response. |
page_id | query | string | no | Filter comments by the page they are attached to. When omitted all comments across all pages are returned. |
Responses
200- Paginated list
application/jsondataarrayarray of:
CommentA comment attached to a page (Notion-style page comment).idstringpage_idstring — ID of the page this comment is attached todiscussion_idstring — Discussion/thread this comment belongs to; null for a top-level page commentbodystring — Comment textcreatedBystringcreatedAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last page. With $top/$skip this is the next $skip value; otherwise a keyset cursor.totalinteger — Total documents in the collection.@odata.countinteger — Present only when $count=true: total matches after $filter/$search.@odata.truncatedboolean — Present 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/pages/comments
Comment on a wiki page
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
Comment
idstringpage_idstring — ID of the page this comment is attached todiscussion_idstring — Discussion/thread this comment belongs to; null for a top-level page commentbodystring — Comment textcreatedBystringcreatedAtstringupdatedAtstring
Responses
201- Created
application/jsonCommentA comment attached to a page (Notion-style page comment).idstringpage_idstring — ID of the page this comment is attached todiscussion_idstring — Discussion/thread this comment belongs to; null for a top-level page commentbodystring — Comment textcreatedBystringcreatedAtstringupdatedAtstring
GET /api/purple-suite/pages/comments/{id}
Get one page comment
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonCommentA comment attached to a page (Notion-style page comment).idstringpage_idstring — ID of the page this comment is attached todiscussion_idstring — Discussion/thread this comment belongs to; null for a top-level page commentbodystring — Comment textcreatedBystringcreatedAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/pages/comments/{id}
Delete a page comment
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Deleted
application/jsonsuccessboolean
404- Not found
PATCH /api/purple-suite/pages/comments/{id}
Edit a page comment
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
Comment
idstringpage_idstring — ID of the page this comment is attached todiscussion_idstring — Discussion/thread this comment belongs to; null for a top-level page commentbodystring — Comment textcreatedBystringcreatedAtstringupdatedAtstring
Responses
200- Updated
application/jsonCommentA comment attached to a page (Notion-style page comment).idstringpage_idstring — ID of the page this comment is attached todiscussion_idstring — Discussion/thread this comment belongs to; null for a top-level page commentbodystring — Comment textcreatedBystringcreatedAtstringupdatedAtstring
404- Not found
POST /api/purple-suite/pages/pages/{id}/move
Move a page under a new parent
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json — required
parent_idstring required — ID of the new parent page, or null to move to the top level
Responses
200- Updated page after move
application/jsonPageidstringparent_idstring — ID of the parent page for nested page hierarchy; null for a top-level page. Reparent via POST /pages/{id}/move.titlestringemojistringcreatedBystringlastEditedAtstring — ISO-8601 timestamp of the last edit; set by the client (not auto-managed by the server)sharedbooleansharedWitharrayarray of:
string
permissionsstringcontentarray — Rich-text block content of the pageRich-text block content of the pagearray of:
PageBlockidstring — Block UUIDtypestringpropsobjecttextColorstringbackgroundColorstringtextAlignmentstringlevelinteger — Heading level (1–3), present only on heading blocks
contentarrayarray of:
typestringtextstringstylesobject
childrenarray — Nested child blocksNested child blocksarray of:
createdAtstringupdatedAtstring
400- parent_id is required
404- Page not found
POST /api/purple-suite/pages/pages/{id}/duplicate
Duplicate a page
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
201- The newly created duplicate page
application/jsonPageidstringparent_idstring — ID of the parent page for nested page hierarchy; null for a top-level page. Reparent via POST /pages/{id}/move.titlestringemojistringcreatedBystringlastEditedAtstring — ISO-8601 timestamp of the last edit; set by the client (not auto-managed by the server)sharedbooleansharedWitharrayarray of:
string
permissionsstringcontentarray — Rich-text block content of the pageRich-text block content of the pagearray of:
PageBlockidstring — Block UUIDtypestringpropsobjecttextColorstringbackgroundColorstringtextAlignmentstringlevelinteger — Heading level (1–3), present only on heading blocks
contentarrayarray of:
typestringtextstringstylesobject
childrenarray — Nested child blocksNested child blocksarray of:
createdAtstringupdatedAtstring
404- Page not found