page/create
Create a standalone Notion page as a child of another page. Supports title, initial body content blocks, and an icon. Use this for wiki pages, reports, and documents — for database rows use database/createPage.
page/create vs database/createPage:
page/create creates a standalone document page nested under a parent page. database/createPage creates a row in a structured database with typed properties. Use the correct operation for your Notion structure.
When to Use
- Client report generation: After a workflow gathers metrics or analysis results, create a structured report page under a client folder page with headings, tables, and text content blocks pre-populated.
- Meeting notes automation: When a calendar event ends, create a meeting notes page under the team's workspace with the meeting title, date, and attendees in the page body.
- Project wiki from template: Spin up a new project page under the team wiki with standard sections (Overview, Goals, Timeline) populated from a template at project kickoff.
- Weekly summary page: Each Monday, auto-generate a weekly summary page under the team's Updates section and populate it with data pulled from other systems.
- Incident post-mortem: When a critical incident is resolved, create a post-mortem page under the engineering runbook with incident details, timeline, and action items pre-filled from incident data.
Configuration
Authentication
| Field | Required | Description |
|---|---|---|
AuthenticationMethod | Required | "ApiToken" or "OAuth2". |
ApiToken | Required | Notion Internal Integration Token starting with secret_. |
ClientId | OAuth2 | OAuth2 client ID. |
ClientSecret | OAuth2 | OAuth2 client secret. |
AccessToken | OAuth2 | OAuth2 access token. |
Operation Fields
| Field | Required | Description |
|---|---|---|
ParentPageId | Required | UUID of the parent page under which this new page will be created. |
Title | Optional | Page title text. Displayed as the page heading in Notion. |
Blocks | Optional | Array of Notion block objects to include as the initial page body content. |
Icon | Optional | Emoji (e.g., "📄") or external image URL for the page icon. |
Sample Configuration
{
"resource": "page",
"operation": "create",
"AuthenticationMethod": "ApiToken",
"ApiToken": "{{ $credentials.notionApiToken }}",
"ParentPageId": "{{ $vars.teamWikiPageId }}",
"Title": "Weekly Summary — {{ $now | date: 'YYYY-MM-DD' }}",
"Icon": "📋",
"Blocks": [
{
"object": "block",
"type": "heading_2",
"heading_2": {
"rich_text": [{ "type": "text", "text": { "content": "This Week" } }]
}
},
{
"object": "block",
"type": "paragraph",
"paragraph": {
"rich_text": [{ "type": "text", "text": { "content": "{{ $json.summaryText }}" } }]
}
}
]
}
Validation Errors
| Error Code | Cause |
|---|---|
NOTION_VALIDATION_FAILED | ParentPageId is empty or not a valid UUID. |
NOTION_INVALID_REQUEST | A block object in Blocks is malformed — check block type and rich_text array structure. |
NOTION_PERMISSION_DENIED | Integration not shared with the parent page. Open the page in Notion and add the integration under Connections. |
NOTION_NOT_FOUND | Parent page UUID does not exist. |
NOTION_RATE_LIMITED | Rate limit exceeded. |
NOTION_INVALID_CONFIG | Authentication fields are missing. |
Output
Success Port
| Field | Type | Description |
|---|---|---|
id | string | UUID of the newly created page. |
url | string | Direct Notion URL to open the page. |
created_time | string | ISO 8601 creation timestamp. |
properties | object | Page properties — for standalone pages this contains the title property only. |
parent | object | Parent reference — page_id equal to the ParentPageId input. |
Error Port
On failure the error port receives errorCode, message, and httpStatus. Wire to a notification node to alert on creation failures.
Sample Output
{
"id": "a7b8c9d0-e1f2-3456-abcd-567890123456",
"url": "https://www.notion.so/a7b8c9d0e1f23456abcd567890123456",
"created_time": "2024-06-11T08:00:00.000Z",
"properties": {
"title": {
"type": "title",
"title": [{ "plain_text": "Weekly Summary — 2024-06-11" }]
}
},
"parent": {
"type": "page_id",
"page_id": "b8c9d0e1-f2a3-4567-bcde-678901234567"
}
}
Expression Reference
| Expression | Type | Use |
|---|---|---|
{{ $output.createPage.id }} | string | Store for subsequent block/appendChildren calls |
{{ $output.createPage.url }} | string | Share the page link in a Slack message or email |
{{ $output.createPage.created_time }} | string | Log creation time for audit trail |
{{ $output.createPage.properties.title.title[0].plain_text }} | string | Echo back the page title in a confirmation |
Node Policies & GuardRails
| Policy | Detail |
|---|---|
| Share integration with parent | The integration must be shared with the parent page (not just the workspace). If the parent page is inside a shared page hierarchy, verify the integration has access to the topmost ancestor. |
| Use database/createPage for rows | If the destination is a Notion database (structured table), use database/createPage. Using page/create with a database as parent creates an unstructured page, not a database row. |
| Store the returned ID | The created page ID is needed for any subsequent operations (append blocks, update properties, archive). Store it immediately in a workflow variable. |
| Block limit per call | The Notion API accepts up to 100 blocks per create call. For pages with more content, create the page first then use block/appendChildren in batches. |
| Credentials in Credentials Manager | Always use {{ $credentials.notionApiToken }} — never hard-code the token. |
Workflow Examples
Example 1 — Auto Weekly Summary Page
Every Monday, create a weekly summary page under the team Updates section with data from the previous week's sprint database query.
// Step 1: ScheduledTrigger (Monday 8am)
// Step 2: database/query (last week's completed tasks)
// Step 3: Function node — build summary text
// Step 4: page/create
{
"ParentPageId": "{{ $vars.teamUpdatesPageId }}",
"Title": "Week of {{ $now | date: 'MMM D, YYYY' }}",
"Icon": "📊",
"Blocks": [{
"object": "block", "type": "paragraph",
"paragraph": { "rich_text": [{ "type": "text", "text": { "content": "{{ $json.summaryText }}" } }] }
}]
}
Example 2 — Incident Post-Mortem Page
When PagerDuty marks an incident as resolved, create a post-mortem page in the engineering runbook.
// Step 1: WebhookTrigger (PagerDuty resolved)
// Step 2: page/create
{
"ParentPageId": "{{ $vars.postMortemsPageId }}",
"Title": "Post-Mortem: {{ $json.incident.title }}",
"Icon": "🔴",
"Blocks": [
{ "type": "heading_2", "heading_2": { "rich_text": [{ "text": { "content": "Incident Summary" } }] } },
{ "type": "paragraph", "paragraph": { "rich_text": [{ "text": { "content": "Severity: {{ $json.incident.severity }}" } }] } }
]
}
// Step 3: Store page ID and add detail blocks via block/appendChildren
Example 3 — Project Wiki Kickoff
Create a project wiki page with standard sections when a new project is registered in the system.
// Step 1: FormTrigger (new project registration)
// Step 2: page/create under team wiki page
// Standard sections: Overview, Goals, Team, Timeline
// Step 3: Share page URL with project lead via EmailSmtp