Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Notion API for creating and managing pages, databases, and blocks.
Notion API for creating and managing pages, databases, and blocks.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
Use the Notion API to create/read/update pages, data sources (databases), and blocks.
Create an integration at https://notion.so/my-integrations Copy the API key (starts with ntn_ or secret_) Store it: mkdir -p ~/.config/notion echo "ntn_your_key_here" > ~/.config/notion/api_key Share target pages/databases with your integration (click "..." โ "Connect to" โ your integration name)
All requests need: 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" Note: The Notion-Version header is required. This skill uses 2025-09-03 (latest). In this version, databases are called "data sources" in the API.
Search for pages and data sources: 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"}' Get page: curl "https://api.notion.com/v1/pages/{page_id}" \ -H "Authorization: Bearer $NOTION_KEY" \ -H "Notion-Version: 2025-09-03" Get page content (blocks): curl "https://api.notion.com/v1/blocks/{page_id}/children" \ -H "Authorization: Bearer $NOTION_KEY" \ -H "Notion-Version: 2025-09-03" Create page in a data source: 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": "xxx"}, "properties": { "Name": {"title": [{"text": {"content": "New Item"}}]}, "Status": {"select": {"name": "Todo"}} } }' Query a data source (database): 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"}] }' Create a data source (database): 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": {}} } }' Update page properties: 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"}}}}' Add blocks to page: 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": [ {"object": "block", "type": "paragraph", "paragraph": {"rich_text": [{"text": {"content": "Hello"}}]}} ] }'
Common property formats for database items: 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"}]}
Databases โ Data Sources: Use /data_sources/ endpoints for queries and retrieval Two IDs: Each database now has both a database_id and a data_source_id Use database_id when creating pages (parent: {"database_id": "..."}) Use data_source_id when querying (POST /v1/data_sources/{id}/query) Search results: Databases return as "object": "data_source" with their data_source_id Parent in responses: Pages show parent.data_source_id alongside parent.database_id Finding the data_source_id: Search for the database, or call GET /v1/data_sources/{data_source_id}
Page/database IDs are UUIDs (with or without dashes) The API cannot set database view filters โ that's UI-only Rate limit: ~3 requests/second average Use is_inline: true when creating data sources to embed them in pages
Workflow acceleration for inboxes, docs, calendars, planning, and execution loops.
Largest current source with strong distribution and engagement signals.