---
title: "Set permissions for a page"
method: PUT
path: "/pages/{pageId}/permissions"
tags: ["Pages"]
---

# Set permissions for a page

`PUT /pages/{pageId}/permissions`

Replaces the full set of permissions for a page. PUT semantics: send the complete list to replace all existing permissions. Send an empty array to remove all user-addressable permissions. Accepts both user emails and group emails (groups appear in other endpoints with synthetic `group-<id>@process.st` emails). Note: only the AllMembers system group is user-addressable; AllAdmins, AllFreeMembers, AllGuests, and AllAnonymous are managed automatically and cannot be set directly. Returns the resulting permissions.

## Path parameters

- `pageId` string, required

## Request body

- PagePermissionEntry[]
  - `email` string, required — Email address.
  - `accessLevel` 'Edit' | 'View', required — Access level granted to a user on this page. - `Edit` — view, edit, and delete the page. - `View` — view the page (read-only).

## Response `200`

- PublicApiPagePermissionListResponse
  - `data` object[] — The list of resources returned by this request.
    - `email` string, required — Email address.
    - `accessLevel` 'Edit' | 'View' | 'Custom', required — Access level a user or group has on this page. `Edit` — view, edit, and delete the page. `View` — view the page (read-only). `Custom` — the user's underlying permission atoms don't match any predefined level; inspect the `permissions` object on the same entry for the actual atoms.
    - `permissions` object, required — Granular permission flags this user or group has on the page.
      - `pageRead` boolean, required — Can view the page.
      - `pageUpdate` boolean, required — Can edit the page.
      - `pageDelete` boolean, required — Can delete the page.
  - `links` object[] — Pagination links. When the result has more pages, look for an entry with `name: "next"` — its `href` is the URL to fetch the next page. Absence of `next` means there are no more pages. For single-resource responses this array is typically empty.
    - `name` string, required — Standard link relation name (RFC 5988) indicating this link's role. Common values include `self`, `edit`, `related`, `previous`, `next`.
    - `href` string, required — URL of the linked resource.
    - `rel` 'Approval Task' | 'Approvals' | 'Assignees' | 'Comment' | 'Data Set Records' | 'Data Sets' | 'Form Field Values' | 'Subject Task' | 'Task' | 'Tasks' | 'Users' | 'Webhook' | 'Workflow' | 'Workflow Run' — Optional. The kind of resource this link points to (e.g. `Workflow`, `Task`, `Comment`).
    - `type` 'Api' | 'App', required — Whether this link targets an API endpoint or a Process Street app URL. `Api` — a callable API endpoint you can fetch directly. `App` — a browser-facing URL in the Process Street UI.

## Other responses

- `400` — Invalid value for: body
- `default`

---

[API](https://skmtc.net/process/apis/process-street-public-api.md) · [All operations](https://skmtc.net/process/apis/process-street-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/process/process-street-public-api/revisions/6199a9464227/schema)
