openclaw-notion-api

Notion API 用于创建和管理页面、数据库和块。包含正确的图片、文件上传功能

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "openclaw-notion-api" with this command: npx skills add ionepub/openclaw-notion-api

openclaw-notion-api

使用 Notion API 创建/读取/更新页面、数据源(数据库)和块。

Setup(设置)

  1. https://www.notion.so/profile/integrations/internal 创建内部集成
  2. 复制 API 密钥(以 ntn_secret_ 开头)
  3. 存储密钥:
mkdir -p ~/.config/notion
echo "ntn_your_key_here" > ~/.config/notion/api_key
  1. 将目标页面/数据库与集成共享(点击 "..." → "Connect to" → 你的集成名称)

API Basics(API 基础)

所有请求都需要:

NOTION_KEY=$(cat ~/.config/notion/api_key)
curl -X GET "https://api.notion.com/v1/..." \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H "Notion-Version: 2025-09-03" \
  -H "Content-Type: application/json"

注意: Notion-Version header 是必需的。本技能使用 2025-09-03(最新版本)。在此版本中,数据库在 API 中称为"数据源"。

Common Operations(常用操作)

搜索页面和数据源:

curl -X POST "https://api.notion.com/v1/search" \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H "Notion-Version: 2025-09-03" \
  -H "Content-Type: application/json" \
  -d '{"query": "page title"}'

获取页面:

curl "https://api.notion.com/v1/pages/{page_id}" \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H "Notion-Version: 2025-09-03"

获取页面内容(块):

curl "https://api.notion.com/v1/blocks/{page_id}/children" \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H "Notion-Version: 2025-09-03"

在数据源中创建页面:

curl -X POST "https://api.notion.com/v1/pages" \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H "Notion-Version: 2025-09-03" \
  -H "Content-Type: application/json" \
  -d '{
    "parent": {"database_id": "xxxxxx"},
    "properties": {
      "Name": {"title": [{"text": {"content": "New Item"}}]},
      "Status": {"select": {"name": "Todo"}}
    }
  }'

查询数据源(数据库):

curl -X POST "https://api.notion.com/v1/data_sources/{data_source_id}/query" \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H "Notion-Version: 2025-09-03" \
  -H "Content-Type: application/json" \
  -d '{
    "filter": {"property": "Status", "select": {"equals": "Active"}},
    "sorts": [{"property": "Date", "direction": "descending"}]
  }'

创建数据源(数据库):

curl -X POST "https://api.notion.com/v1/data_sources" \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H "Notion-Version: 2025-09-03" \
  -H "Content-Type: application/json" \
  -d '{
    "parent": {"page_id": "xxx"},
    "title": [{"text": {"content": "My Database"}}],
    "properties": {
      "Name": {"title": {}},
      "Status": {"select": {"options": [{"name": "Todo"}, {"name": "Done"}]}},
      "Date": {"date": {}}
    }
  }'

更新页面属性:

curl -X PATCH "https://api.notion.com/v1/pages/{page_id}" \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H "Notion-Version: 2025-09-03" \
  -H "Content-Type: application/json" \
  -d '{"properties": {"Status": {"select": {"name": "Done"}}}}'

向页面添加块:

curl -X PATCH "https://api.notion.com/v1/blocks/{page_id}/children" \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H "Notion-Version: 2025-09-03" \
  -H "Content-Type: application/json" \
  -d '{
    "children": [
      {"type": "paragraph", "paragraph": {"rich_text": [{"text": {"content": "Hello"}}]}}
    ]
  }'

Property Types(属性类型)

数据库项的常用属性格式:

  • 标题(Title): {"title": [{"text": {"content": "..."}}]}
  • 富文本(Rich text): {"rich_text": [{"text": {"content": "..."}}]}
  • 选择(Select): {"select": {"name": "Option"}}
  • 多选(Multi-select): {"multi_select": [{"name": "A"}, {"name": "B"}]}
  • 日期(Date): {"date": {"start": "2024-01-15", "end": "2024-01-16"}}
  • 复选框(Checkbox): {"checkbox": true}
  • 数字(Number): {"number": 42}
  • URL: {"url": "https://..."}
  • 邮箱(Email): {"email": "a@b.com"}
  • 关联(Relation): {"relation": [{"id": "page_id"}]}

Key Differences in 2025-09-03(2025-09-03 版本的关键差异)

  • 数据库 → 数据源: 使用 /data_sources/ 端点进行查询和检索
  • 双 ID: 每个数据库现在同时拥有 database_iddata_source_id
    • 创建页面时使用 database_idparent: {"database_id": "..."}
    • 查询时使用 data_source_idPOST /v1/data_sources/{id}/query
  • 搜索结果: 数据库以 "object": "data_source" 形式返回,并带有其 data_source_id
  • 响应中的父级: 页面显示 parent.data_source_id 以及 parent.database_id
  • 查找 data_source_id: 搜索数据库,或调用 GET /v1/data_sources/{data_source_id}

File Upload(文件上传)

使用 Direct Upload 方法上传图片或文件到 Notion(文件大小不超过 20MB)。两者的步骤完全相同,仅在 Step 3 的块类型上有区别。

Step 1: Create File Upload Object(创建文件上传对象)

创建上传对象以获取上传 URL:

curl --request POST \
  --url 'https://api.notion.com/v1/file_uploads' \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Notion-Version: 2025-09-03' \
  --data '{}'

响应包含:

  • id:文件上传 ID(在步骤 3 中使用)
  • upload_url:上传文件内容的 URL

Step 2: Upload File Content(上传文件内容)

使用 multipart/form-data 上传实际的文件:

curl --request POST \
  --url 'https://api.notion.com/v1/file_uploads/{file_upload_id}/send' \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H 'Notion-Version: 2025-09-03' \
  -H 'Content-Type: multipart/form-data' \
  -F "file=@/path/to/file.png"

重要:

  • 使用 POST 方法(不是 PUT)
  • 包含 AuthorizationNotion-Version headers
  • 使用 -F 进行 multipart/form-data
  • 文件大小必须 ≤ 20MB

Step 3: Insert into Page(插入到页面)

将上传的文件作为块添加。根据文件类型选择不同的块类型:

上传图片:

curl --request PATCH \
  --url "https://api.notion.com/v1/blocks/{page_id}/children" \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Notion-Version: 2025-09-03' \
  --data '{
    "children": [
      {
        "type": "image",
        "image": {
          "type": "file_upload",
          "file_upload": {
            "id": "{file_upload_id}"
          }
        }
      }
    ]
  }'

上传文件:

curl --request PATCH \
  --url "https://api.notion.com/v1/blocks/{page_id}/children" \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Notion-Version: 2025-09-03' \
  --data '{
    "children": [
      {
        "type": "file",
        "file": {
          "type": "file_upload",
          "file_upload": {
            "id": "{file_upload_id}"
          }
        }
      }
    ]
  }'

注意: 不要在块定义中包含 "object": "block"

Common Errors(常见错误)

  • invalid_request_url:检查是否使用了 POST 方法和正确的 URL 格式
  • unauthorized:确保步骤 2 中存在 AuthorizationNotion-Version headers
  • validation_error:必须在附加(步骤 3)之前上传文件(步骤 2)

Notes(注意事项)

  • 页面/数据库 ID 是 UUID(带或不带连字符)
  • API 无法设置数据库视图过滤器 — 这是 UI 专属功能
  • 速率限制:平均约 3 请求/秒
  • 创建数据源时使用 is_inline: true 以将其嵌入页面中

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

Sendflare

通过 Sendflare SDK 发送带附件的电子邮件,管理联系人列表,支持 CC/BCC 和安全 API 认证。

Registry SourceRecently Updated
General

Playtomic - Book courts using padel-tui

This skill should be used when the user asks to "book a padel court", "find available padel courts", "search padel courts near me", "reserve a Playtomic cour...

Registry SourceRecently Updated
General

Fund Keeper

国内场外基金智能顾问 + 股票行情查询。实时估值、买卖建议、收益统计、定投计划、OCR 识图、股票 - 基金联动。支持离线模式、多数据源缓存。

Registry SourceRecently Updated