Skip to content

Get a published page ​

GET/api/v2/workspaces/{slug}/published-pages/{anchor}/

Read a published page by its anchor. The response is the full page object, the same shape a page detail read returns, with the body in description_html.

The anchor grants access. The endpoint doesn't check your workspace or project membership, or the page's access level. Any authenticated caller whose credentials are valid for this workspace can read the page. See Who can read a published page.

This works for published project pages and published wiki pages alike. collection_id is always null on this read.

Path Parameters ​

slug:requiredstring

The workspace slug. It appears in your Plane URLs. In https://app.plane.so/my-team/projects/, the slug is my-team. The anchor must belong to this workspace.

anchor:requiredstring

The public anchor Plane minted when the page was published, a 32-character hex string. It isn't the page id. A page id here returns 404.

Response shaping ​

fields:optionalstring

Comma-separated list of fields to return. Unrequested keys are omitted from the response, not returned as null, so absent means "not requested" and null means "actually null". id always comes back whether or not you name it.

Pass all for every requestable field. An unknown name is a 400 that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving.

Requestable here: access, archived_at, collection_id, color, created_at, created_by_id, description_html, description_stripped, external_id, external_source, id, is_global, is_locked, logo_props, name, owned_by_id, parent_id, project_ids, sort_order, updated_at, updated_by_id, view_props.

See Sparse fields.

expand:optionalstring

Comma-separated relations to embed alongside the ids: owned_by (the page's owner), parent (its parent page).

Expansion is separate-key: ?expand=parent keeps parent_id and adds a parent object next to it, so an id is never replaced by an object. An unknown value is a 400.

?fields= and ?expand= are independent namespaces. Relation names are not valid ?fields= tokens (and vice versa), and an expanded object survives field filtering. For example, ?fields=id,name&expand=owned_by returns id, name, and owned_by. See Expanding relations.

Scopes ​

projects.pages:read

The scope is the same for a published wiki page.

Errors ​

StatusCodeCause
401unauthorizedMissing or invalid credentials, or an API key bound to a different workspace.
402payment_requiredThe feature this endpoint belongs to isn't enabled on your plan, or is switched off.
403forbiddenYour OAuth token lacks the scope, or its app isn't installed in this workspace.
404not_foundUnknown anchor, an anchor from another workspace, an anchor for something other than a page, or the page was unpublished, archived, or deleted.
406not_acceptableThe Accept header asks for a representation the API can't produce.
429rate_limitedThrottled. Honor the Retry-After header before retrying.
Get a published page
bash
curl -X GET \
  "https://api.plane.so/api/v2/workspaces/my-team/published-pages/3f9c2a7b8e1d4c6f9a0b5e2d7c4f1a83/" \
  -H "X-Api-Key: $PLANE_API_KEY"
Response200
json
{
  "id": "9c1f0b3d-6d2e-4c9a-8b41-2f7e5a0d6c88",
  "name": "Q3 release notes",
  "access": 0,
  "color": "",
  "is_locked": false,
  "archived_at": null,
  "logo_props": {},
  "view_props": {
    "full_width": false
  },
  "description_html": "<h2>Q3 release notes</h2><p>Faster boards and a new API.</p>",
  "description_stripped": "Q3 release notes Faster boards and a new API.",
  "parent_id": null,
  "owned_by_id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
  "collection_id": null,
  "project_ids": ["4af68566-94a4-4eb3-94aa-50dc9427067b"],
  "is_global": false,
  "sort_order": 65535.0,
  "external_id": null,
  "external_source": null,
  "created_at": "2026-01-14T09:22:41.478363Z",
  "updated_at": "2026-01-20T15:08:12.330914Z",
  "created_by_id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
  "updated_by_id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430"
}
Response404
json
{
  "type": "not_found",
  "code": "not_found",
  "detail": "The requested resource was not found."
}