Portal Community
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

Configuration

Authentication

FieldRequiredDescription
AuthenticationMethodRequired"ApiToken" or "OAuth2".
ApiTokenRequiredNotion Internal Integration Token starting with secret_.
ClientIdOAuth2OAuth2 client ID.
ClientSecretOAuth2OAuth2 client secret.
AccessTokenOAuth2OAuth2 access token.

Operation Fields

FieldRequiredDescription
ParentPageIdRequiredUUID of the parent page under which this new page will be created.
TitleOptionalPage title text. Displayed as the page heading in Notion.
BlocksOptionalArray of Notion block objects to include as the initial page body content.
IconOptionalEmoji (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 CodeCause
NOTION_VALIDATION_FAILEDParentPageId is empty or not a valid UUID.
NOTION_INVALID_REQUESTA block object in Blocks is malformed — check block type and rich_text array structure.
NOTION_PERMISSION_DENIEDIntegration not shared with the parent page. Open the page in Notion and add the integration under Connections.
NOTION_NOT_FOUNDParent page UUID does not exist.
NOTION_RATE_LIMITEDRate limit exceeded.
NOTION_INVALID_CONFIGAuthentication fields are missing.

Output

Success Port

FieldTypeDescription
idstringUUID of the newly created page.
urlstringDirect Notion URL to open the page.
created_timestringISO 8601 creation timestamp.
propertiesobjectPage properties — for standalone pages this contains the title property only.
parentobjectParent 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

ExpressionTypeUse
{{ $output.createPage.id }}stringStore for subsequent block/appendChildren calls
{{ $output.createPage.url }}stringShare the page link in a Slack message or email
{{ $output.createPage.created_time }}stringLog creation time for audit trail
{{ $output.createPage.properties.title.title[0].plain_text }}stringEcho back the page title in a confirmation

Node Policies & GuardRails

PolicyDetail
Share integration with parentThe 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 rowsIf 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 IDThe created page ID is needed for any subsequent operations (append blocks, update properties, archive). Store it immediately in a workflow variable.
Block limit per callThe 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 ManagerAlways 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