Portal Community

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
PageRequiredNotion page UUID. Format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
SimplifyOptionalWhen true, flattens property values to plain types (e.g., Status: "In Progress" instead of the full Notion property object). Default: false.

Sample Configuration

{
  "resource": "page",
  "operation": "get",
  "AuthenticationMethod": "ApiToken",
  "ApiToken": "{{ $credentials.notionApiToken }}",
  "Page": "{{ $json.pageId }}",
  "Simplify": true
}

Validation Errors

Error CodeCause
NOTION_VALIDATION_FAILEDPage field is empty or not a valid UUID format.
NOTION_NOT_FOUNDNo page exists with the given UUID, or the page has been permanently deleted.
NOTION_PERMISSION_DENIEDIntegration not shared with this page or its parent database.
NOTION_UNAUTHORIZEDAPI token is invalid.
NOTION_RATE_LIMITEDRate limit exceeded. Add a Delay node when calling in a loop.

Output

Success Port

FieldTypeDescription
idstringPage UUID.
urlstringFull Notion URL to open the page.
created_timestringISO 8601 creation timestamp.
last_edited_timestringISO 8601 timestamp of the last edit.
archivedbooleantrue if the page is archived.
parentobjectParent reference — either database_id or page_id.
propertiesobjectAll property values. Structure depends on Simplify: raw Notion objects when false, flattened plain values when true.
iconobjectPage icon. Contains type ("emoji" or "external") and the icon value.

Error Port

On failure the error port receives errorCode, message, and httpStatus. Handle NOTION_NOT_FOUND gracefully when page IDs come from user input or external systems that may reference deleted pages.

Sample Output

{
  "id": "b8c9d0e1-f2a3-4567-bcde-678901234567",
  "url": "https://www.notion.so/b8c9d0e1f2a34567bcde678901234567",
  "created_time": "2024-05-20T09:00:00.000Z",
  "last_edited_time": "2024-06-10T15:30:00.000Z",
  "archived": false,
  "icon": { "type": "emoji", "emoji": "📋" },
  "properties": {
    "Name": {
      "type": "title",
      "title": [{ "plain_text": "Build login page" }]
    },
    "Status": {
      "type": "select",
      "select": { "name": "In Progress" }
    },
    "Assignee": {
      "type": "people",
      "people": [{ "name": "Sarah Chen", "id": "user-uuid-1" }]
    },
    "Due": {
      "type": "date",
      "date": { "start": "2024-06-15" }
    }
  },
  "parent": {
    "type": "database_id",
    "database_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
}

Expression Reference

ExpressionTypeUse
{{ $output.getPage.last_edited_time }}stringCompare against last sync timestamp
{{ $output.getPage.archived }}booleanGuard against writing to archived pages
{{ $output.getPage.url }}stringInclude in notification messages
{{ $output.getPage.properties.Status.select.name }}stringRead select property for workflow branching
{{ $output.getPage.properties.Assignee.people[0].name }}stringGet assignee name for routing notifications
{{ $output.getPage.properties.Due.date.start }}stringRead due date for scheduling logic

Node Policies & GuardRails

PolicyDetail
Check archived before updateAlways check archived === false before calling page/update on a page. Attempting to update an archived page returns an error. Use an IfCondition node to gate the update.
Use Simplify for expressionsEnable Simplify: true when reading property values in downstream expressions — it removes the deeply nested Notion property structure and returns plain string/number/date values, making expressions significantly shorter.
Null-safe people accessThe people property returns an empty array when no assignee is set. Always check people.length > 0 before accessing people[0].name to avoid null reference errors.
page/get returns metadata onlyThis operation returns page properties and metadata — it does NOT return the page body content (blocks). Use block/getChildren to retrieve the page body.
Credentials in Credentials ManagerAlways use {{ $credentials.notionApiToken }} — never hard-code the token.

Workflow Examples

Example 1 — Sync Freshness Gate

Before exporting a page's data to an external system, check whether it has been edited since the last sync.

// Step 1: page/get
{ "Page": "{{ $json.pageId }}", "Simplify": true }

// Step 2: IfCondition
// Condition: {{ $output.getPage.last_edited_time }} > {{ $vars.lastSyncTime }}
// True: proceed to export
// False: StopWorkflow (no changes)

Example 2 — Status-Gated Update

Read the current page status. Only proceed with the update if the page is not already marked "Done" and is not archived.

// Step 1: page/get { "Page": "{{ $json.pageId }}", "Simplify": true }
// Step 2: IfCondition
// Condition 1: {{ $output.getPage.archived }} === false
// Condition 2: {{ $output.getPage.properties.Status }} !== "Done"
// Both true: proceed to page/update
// Otherwise: log and stop

Example 3 — Notification with Page URL

After a trigger fires on a page, fetch the page to get its title and URL, then send a Slack alert to the assignee.

// Step 1: page/get { "Page": "{{ $trigger.pageId }}" }
// Step 2: user/get to resolve assignee Slack ID
// Step 3: Slack/postMessage
{
  "channel": "@{{ $json.assigneeSlackId }}",
  "text": "Task updated: {{ $output.getPage.properties.Name.title[0].plain_text }}\n{{ $output.getPage.url }}"
}