Skip to content
API Design
Skill

/notion-openapi-skill

Operate Notion Public API through UXC with a curated OpenAPI schema for search, block traversal, page reads, content writes, and data source/database inspection. Use when tasks need recursive reads or structured writes that Notion MCP does not expose directly.

BOOST
From plugin
uxc
11962 skills
Install
$ npx -y skills add holon-run/uxc --skill notion-openapi-skill --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/notion-openapi-skill

Context preview

The summary Claude sees to decide when to auto-load this skill.

Operate Notion Public API through UXC with a curated OpenAPI schema for search, block traversal, page reads, content writes, and data source/database inspection. Use when tasks need recursive reads or structured writes that Notion MCP does not expose directly.

SKILL.md

notion-openapi-skill.SKILL.md
name: notion-openapi-skill
description: Operate Notion Public API through UXC with a curated OpenAPI schema for search, block traversal, page reads, content writes, and data source/database inspection. Use when tasks need recursive reads or structured writes that Notion MCP does not expose directly.

Notion Public API Skill

Use this skill to run Notion Public API operations through `uxc` + OpenAPI.

Reuse the `uxc` skill for shared execution, OAuth, and error-handling guidance.

Prerequisites

  • `uxc` is installed and available in `PATH`.
  • Network access to `https://api.notion.com/v1`.
  • Access to the curated OpenAPI schema URL:
  • `https://raw.githubusercontent.com/holon-run/uxc/main/skills/notion-openapi-skill/references/notion-public.openapi.json`
  • A Notion integration token or OAuth credential with content read access.
  • For writes, the integration also needs the corresponding Notion insert/update content capabilities.

Scope

This skill covers a read-first Notion REST surface focused on traversal plus common content writes:

  • token identity validation
  • title search for pages, data sources, and databases
  • page lookup
  • block lookup
  • recursive traversal via block-children pagination
  • page property retrieval
  • page creation
  • page updates, including trash/restore via `in_trash`
  • block append
  • block updates
  • block deletion
  • data source retrieval and query
  • legacy database retrieval and query

This skill does **not** cover:

  • full Notion REST coverage
  • comments, file uploads, webhooks, page move, or schema mutation
  • automatic recursive traversal loops inside one single command

Endpoint And Version

  • base URL: `https://api.notion.com/v1`
  • required version header for this skill: `Notion-Version: 2026-03-11`

The schema is intentionally curated around traversal and schema discovery. It is not a full dump of the Notion API.

Authentication

Notion Public API requires:

  • `Authorization: Bearer <token>`
  • `Notion-Version: 2026-03-11`

Recommended: dedicated REST credential

If you already have an internal integration token:

uxc auth credential set notion-openapi \
  --auth-type api_key \
  --header "Authorization=Bearer {{secret}}" \
  --header "Notion-Version=2026-03-11" \
  --secret-env NOTION_API_TOKEN

uxc auth binding add \
  --id notion-openapi \
  --host api.notion.com \
  --path-prefix /v1 \
  --scheme https \
  --credential notion-openapi \
  --priority 100

How to get the internal integration token:

1. Open the Notion integrations dashboard and create an internal integration for your workspace. 2. In the integration configuration page, copy the API secret shown by Notion. 3. In Notion UI, open each target page, data source, or database and add this integration via `Share` or `Connections`. 4. Use that API secret as `NOTION_API_TOKEN` or pass it directly to `uxc auth credential set`.

Without connecting the integration to the target content, REST calls may authenticate successfully but still fail with access errors or return incomplete search results.

If you want OAuth-managed tokens for the REST host:

uxc auth oauth start notion-openapi \
  --endpoint https://api.notion.com/v1 \
  --redirect-uri http://127.0.0.1:8788/callback \
  --client-id <client_id> \
  --scope read

uxc auth oauth complete notion-openapi \
  --session-id <session_id> \
  --authorization-response 'http://127.0.0.1:8788/callback?code=...'

uxc auth credential set notion-openapi \
  --auth-type oauth \
  --header "Authorization=Bearer {{secret}}" \
  --header "Notion-Version=2026-03-11"

uxc auth binding add \
  --id notion-openapi \
  --host api.notion.com \
  --path-prefix /v1 \
  --scheme https \
  --credential notion-openapi \
  --priority 100

Advanced: reuse the same OAuth credential as `notion-mcp`

This is technically possible in `uxc` if the existing credential already has a valid Notion OAuth access token.

Important:

  • once an OAuth credential uses custom headers, include `Authorization=Bearer {{secret}}` explicitly
  • adding `Notion-Version=2026-03-11` on the shared credential means the same header will also be sent to `mcp.notion.com/mcp`
  • that extra header is expected to be harmless, but this is an interoperability assumption rather than an explicit Notion guarantee

Shared-credential setup:

uxc auth credential set notion-mcp \
  --auth-type oauth \
  --header "Authorization=Bearer {{secret}}" \
  --header "Notion-Version=2026-03-11"

uxc auth binding add \
  --id notion-openapi-shared \
  --host api.notion.com \
  --path-prefix /v1 \
  --scheme https \
  --credential notion-mcp \
  --priority 100

Validate the effective mapping when auth looks wrong:

uxc auth binding match https://api.notion.com/v1

Core Workflow

1. Use the fixed link command by default:

  • `command -v notion-openapi-cli`
  • If missing, create it:

`uxc link notion-openapi-cli https://api.notion.com/v1 --schema-url https://raw.githubusercontent.com/holon-run/uxc/main/skills/notion-openapi-skill/references/notion-public.openapi.json`

  • `notion-openapi-cli -h`

2. Inspect operation schema first:

  • `notion-openapi-cli post:/search -h`
  • `notion-openapi-cli get:/blocks/{block_id}/children -h`
  • `notion-openapi-cli post:/pages -h`
  • `notion-openapi-cli patch:/blocks/{block_id}/children -h`
  • `notion-openapi-cli post:/data_sources/{data_source_id}/query -h`

3. Prefer read validation before broader traversal:

  • `notion-openapi-cli get:/users/me`
  • `notion-openapi-cli post:/search '{"query":"Roadmap","filter":{"property":"object","value":"page"},"page_size":10}'`
  • `notion-openapi-cli get:/blocks/{block_id}/children block_id=<uuid> page_size=100`

4. Traverse recursively outside the API call boundary:

  • use `get:/blocks/{block_id}/children` page by page
  • for every returned child block with `has_children=true`, call `get:/blocks/{block_id}/children` again on that child ID

5. Use data source o

Read more
Ships withuxc

One CLI for tools across protocols UXC helps agents and automation discover and invoke APIs and tools across OpenAPI, MCP, GraphQL, gRPC, and JSON-RPC through one consistent workflow.

Get the whole plugin

Other skills on uxc.