Project pages overview
Project pages are the documents that live inside a project.
The project page object
Attributes
accessintegerWho can see this.
archived_atstring (date-time)When the record was archived, or
nullif it is active.collection_idstringAlways
nullon project page reads. Collections hold workspace (wiki) pages.colorstringHex color used wherever this is rendered, for example
#3f76ff.created_atstring (date-time)When the project page was created.
updated_atstring (date-time)When the project page was last updated.
created_by_idstring (uuid)The user who created the project page.
updated_by_idstring (uuid) or nullThe user who last updated the project page.
nulluntil someone updates it.description_htmlstringRich-text body as HTML. This is the field the Plane editor round-trips.
description_strippedstringThe description stripped.
external_idstringYour system's identifier for this record, for sync and import correlation.
external_sourcestringThe system
external_idcame from, for examplegithuborjira.idstring (uuid)Unique identifier.
is_globalbooleanWhether this lives at the workspace level rather than inside a project.
is_lockedbooleanPrevents further edits to the content. A locked page can still be archived and unarchived.
logo_propsstringEditor-owned logo descriptor. Pass back what you read rather than composing it by hand.
namestringDisplay name.
owned_by_idstring (uuid)The related owned by.
parent_idstring (uuid)The related parent.
project_idsarray of string (uuid)Every project the page belongs to. A page can be shared into more than one project, so the list can hold more than the project in the path. Deleted projects, and projects the page was removed from, don't appear. List rows omit this field by default. Request it with
?fields=.sort_ordernumberManual ordering weight. Lower sorts first.
view_propsstringEditor-owned layout descriptor. Pass back what you read.
{
"access": 0,
"archived_at": null,
"collection_id": null,
"color": "#3f76ff",
"created_at": "2026-01-14T09:22:41.478363Z",
"created_by_id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
"description_html": "<p>Details go here.</p>",
"description_stripped": "example",
"external_id": null,
"external_source": null,
"id": "b7e42a19-3c5d-4f80-9a26-8d1c0f4e7b53",
"is_global": false,
"is_locked": false,
"logo_props": null,
"name": "Example name",
"owned_by_id": "f960d3c2-8524-4a41-b8eb-055ce4be2a7f",
"parent_id": "f960d3c2-8524-4a41-b8eb-055ce4be2a7f",
"project_ids": ["4af68566-94a4-4eb3-94aa-50dc9427067b"],
"sort_order": 65535,
"view_props": null
}Endpoints
| Method | Path | Description |
|---|---|---|
GET | /api/v2/workspaces/{slug}/projects/{project_id}/pages/ | List project pages |
GET | /api/v2/workspaces/{slug}/projects/{project_id}/pages/{pk}/ | Get a project page |
POST | /api/v2/workspaces/{slug}/projects/{project_id}/pages/ | Create a project page |
PATCH | /api/v2/workspaces/{slug}/projects/{project_id}/pages/{pk}/ | Update a project page |
DELETE | /api/v2/workspaces/{slug}/projects/{project_id}/pages/{pk}/ | Delete a project page |
POST | /api/v2/workspaces/{slug}/projects/{project_id}/pages/{pk}/archive/ | Archive a project page |
POST | /api/v2/workspaces/{slug}/projects/{project_id}/pages/{pk}/unarchive/ | Unarchive a project page |
Archiving and deleting
You must archive a page before you can delete it. Archive a project page archives the page and its nested pages, and unpublishes the page if it was published. Unarchive a project page restores them. An archived page stays readable, with archived_at set.
Response shaping
Every project page read accepts ?fields= for sparse responses. See Sparse fields. Errors follow the shared problem+json contract.

