--- id: moltis-org/moltis/notion version: "817d2c94" license: MIT install: manual updated: 2026-07-27 --- # notion — This skill exposes the Notion API through curl, enabling you to programmatically create, retrieve, update, and delete pages, databases, and blocks. Work with properties like titles, dates, selections, and relations using standard HTTP requests authenticated with your Notion API key. Publisher: moltis-org · Stars: 2795 · Updated: 2026-07-27 Install (manual): `git clone https://github.com/moltis-org/moltis` ## SKILL.md # Notion API Use the Notion API via curl to create, read, update pages, databases (data sources), and blocks. No extra tools needed — just curl and a Notion API key. ## Prerequisites 1. Create an integration at https://notion.so/my-integrations 2. Copy the API key (starts with `ntn_` or `secret_`) 3. Store it in `your environment`: ``` NOTION_API_KEY=ntn_your_key_here ``` 4. **Important:** Share target pages/databases with your integration in Notion (click "..." → "Connect to" → your integration name) ## API Basics All requests use this pattern: ```bash curl -s -X GET "https://api.notion.com/v1/..." \ -H "Authorization: Bearer $NOTION_API_KEY" \ -H "Notion-Version: 2025-09-03" \ -H "Content-Type: application/json" ``` The `Notion-Version` header is required. This skill uses `2025-09-03` (latest). In this version, databases are called "data sources" in the API. ## Common Operations ### Search ```bash curl -s -X POST "https://api.notion.com/v1/search" \ -H "Authorization: Bearer $NOTION_API_KEY" \ -H "Notion-Version: 2025-09-03" \ -H "Content-Type: application/json" \ -d '{"query": "page title"}' ``` ### Get Page ```bash curl -s "https://api.notion.com/v1/pages/{page_id}" \ -H "Authorization: Bearer $NOTION_API_KEY" \ -H "Notion-Version: 2025-09-03" ``` ### Get Page Content (blocks) ```bash curl -s "https://api.notion.com/v1/blocks/{page_id}/children" \ -H "Authorization: Bearer $NOTION_API_KEY" \ -H "Notion-Version: 2025-09-03" ``` ### Create Page in a Database ```bash curl -s -X POST "https://api.notion.com/v1/pages" \ -H "Authorization: Bearer $NOTION_API_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 Database ```bash curl -s -X POST "https://api.notion.com/v1/data_sources/{data_source_id}/query" \ -H "Authorization: Bearer $NOTION_API_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 Database ```bash curl -s -X POST "https://api.notion.com/v1/data_sources" \ -H "Authorization: Bearer $NOTION_API_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 ```bash curl -s -X PATCH "https://api.notion.com/v1/pages/{page_id}" \ -H "Authorization: Bearer $NOTION_API_KEY" \ -H "Notion-Version: 2025-09-03" \ -H "Content-Type: application/json" \ -d '{"properties": {"Status": {"select": {"name": "Done"}}}}' ``` ### Add Content to a Page ```bash curl -s -X PATCH "https://api.notion.com/v1/blocks/{page_id}/children" \ -H "Authorization: Bearer $NOTION_API_KEY" \ -H "Notion-Version: 2025-09-03" \ -H "Content-Type: application/json" \ -d '{ "children": [ {"object": "block", "type": "paragraph", "paragraph": {"rich_text": [{"text": {"content": "Hello from the agent!"}}]}} ] }' ``` ## Property Types 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": "2026-01-15", "end": "2026-01-16"}}` - **Checkbox:** `{"checkbox": true}` - **Number:** `{"number": 42}` - **URL:** `{"url": "https://..."}` - **Email:** `{"email": "user@example.com"}` - **Relation:** `{"relation": [{"id": "page_id"}]}` ## Key Differences in API Version 2025-09-03 - **Databases → Data Sources:** Use `/data_sources/` endpoints for queries and retrieval - **Two IDs:** Each database 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` ## Notes - Page/database IDs are UUIDs (with or without dashes) - Rate limit: ~3 requests/second average - The API cannot set database view filters — that's UI-only - Use `is_inline: true` when creating data sources to embed them in pages - Add `-s` flag to curl to suppress progress bars (cleaner output for Moltis) - Pipe output through `jq` for readable JSON: `... | jq '.results[0].properties'` [View on SkillFed](https://skillfed.io/moltis-org/moltis/notion) · [View on GitHub](https://github.com/moltis-org/moltis)