Create a page under a page
const url = 'https://flow.work.optidata.cloud/api/categories/993/pages/2927';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"title":"First week"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://flow.work.optidata.cloud/api/categories/993/pages/2927 \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "title": "First week" }'Same as POST /categories/{category}/pages, but the new page is nested
under {page}, which becomes its parent_id. The category’s Overview
page cannot have children.
Authorizations
Section titled “Authorizations”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters”Id of the category. Read it from GET /categories.
Id of a page of that category.
Request Bodyrequired
Section titled “Request Bodyrequired”object
Emoji shown before the title.
Title color as a hex code, #rgb or #rrggbb.
URL of the page’s cover image.
Examples
{ "title": "First week"}Responses
Section titled “ Responses ”The page was created.
A page as returned right after it is created.
object
Id of the page this one is nested under, or null for a top-level page.
Id of the page’s author.
Short public identifier of the page.
The page’s current version — its published version once it has one.
published once a version has been published.
When a version was last published.
true for the category’s Overview page.
Sort position among its siblings.
The page’s own visibility as stored — null when it inherits the category’s.
A page’s own visibility. inherit follows the category; public shares
the page with anyone who has its link, whatever the category’s visibility.
Who can see a category. restricted: only the people and groups it is
shared with. internal: everyone in the company. public: anyone with the
link, including people who are not signed in.
Whether the page is reachable by anyone with its link.
Reserved. Always null for pages created through the API.
Not used — read last_content_published_at.
Set when the page is in the trash.
How a page looks in the Papers app.
object
object
URL-friendly form of the name.
Who can see a category. restricted: only the people and groups it is
shared with. internal: everyone in the company. public: anyone with the
link, including people who are not signed in.
Shortcut for visibility == public.
Short public identifier of the category.
Id of the user who owns the category, when it has one.
Set when the category mirrors a group: it is shared with the group’s members, and its name and description follow the group’s.
Identifier of the company the category belongs to.
Set when the category is in the trash.
Examples
{ "meta": null, "title": "First week", "user_id": 20, "category_id": 993, "parent_id": 2927, "identifier": "TfWRpMvhMN", "position": 0, "updated_at": "2026-10-19T13:50:46.000000Z", "created_at": "2026-10-19T13:50:46.000000Z", "id": 2928, "page_content_id": 4509, "effective_visibility": "restricted", "display_visibility": "inherit", "is_public": false, "customization": { "id": 2432, "page_id": 2928, "emoji": null, "title_color": null, "created_at": "2026-10-19T13:50:46.000000Z", "updated_at": "2026-10-19T13:50:46.000000Z", "cover_image_url": null }, "category": { "id": 993, "cuid": "7f3c2a10-5b8e-4d21-9c6a-0e4f1b2d3c4a", "name": "Onboarding", "slug": "onboarding", "description": "Everything a new hire needs in the first month.", "created_at": "2026-10-19T13:50:38.000000Z", "updated_at": "2026-10-19T13:50:38.000000Z", "deleted_at": null, "visibility": "restricted", "user_id": 20, "identifier": "jYpV3A", "group_id": null, "is_public": false }}No authentication key was sent.
Authentication failures use an error key rather than message.
object
Examples
No bearer token sent
{ "error": "JWT passport exception: Missing bearer token in request"}The caller may not create pages in this category, or {page} is the
category’s Overview page.
Generic error envelope used by permission, lookup and framework failures.
object
A rule enforced by Papers itself — a version that can no longer change,
a special page. status repeats the HTTP status; help is a hint for
the end user and is often empty.
object
Examples
{ "message": "This action is unauthorized."}Parent is the Overview page
{ "error": "It is not possible to create a page with a special page as parent", "status": 403, "help": ""}No such resource — or it does not belong to the category or page in the path.
Generic error envelope used by permission, lookup and framework failures.
object
Examples
{ "message": "No query results for model [App\\Models\\Page] 999999"}The authentication key is expired or not recognised. Get a fresh one and retry.
Authentication failures use an error key rather than message.
object
Examples
{ "error": "JWT passport expired: Passport expired"}The request failed validation.
object
The first validation message.
Validation messages keyed by field name.
object
Examples
{ "message": "The title field is required.", "errors": { "title": [ "The title field is required." ] }}