with one click
notion
Notion API for creating and managing pages, databases, and blocks.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Notion API for creating and managing pages, databases, and blocks.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
| name | notion |
| description | Notion API for creating and managing pages, databases, and blocks. |
| homepage | https://developers.notion.com |
| metadata | {"clawdbot":{"emoji":"📝"}} |
Use the Notion API to create/read/update pages, data sources (databases), and blocks.
crud/cli.pyNEVER write directly to these databases via curl. Always use the Python CLI:
| DB name | database_id |
|---|---|
| Reminders - Akash | 32678008-9100-802f-ad9f-fb48ff5f4c1d |
| Reminders - Shared | 2054e39c-3f09-431d-8821-0e6a7513913a |
| Reminders - Abhigna | 5d6732b1-7e30-4856-b56b-edbf9c3df229 |
Use this command for ANY reminder write (eval, user, cron — all of them):
python3 /root/lyra-ai/crud/cli.py parse '<the user\'s reminder request verbatim>'
⛔ Write confirmation is MANDATORY:
After running crud/cli.py, the CLI prints a success line including the Notion page URL and/or page ID.
Examples:
python3 /root/lyra-ai/crud/cli.py parse 'Add a reminder: call the dentist tomorrow at 3pm'NOTION_REMINDERS_DB_ID=2054e39c-3f09-431d-8821-0e6a7513913a python3 /root/lyra-ai/crud/cli.py parse 'Add a reminder: X'Why this rule exists: the CLI auto-tags every page with a Source select property (user|eval|cron) based on the active session, which is what the eval cleanup pipeline relies on to keep test data out of prod. Writing directly via curl bypasses this and pollutes the production DBs.
If you genuinely cannot use the CLI (e.g., the schema needs a property the CLI doesn't set), include "Source": {"select": {"name": "user"}} (or "eval" / "cron") explicitly in your properties payload. The Source property is REQUIRED for Reminders DB writes.
ntn_ or secret_)mkdir -p ~/.config/notion
echo "ntn_your_key_here" > ~/.config/notion/api_key
All requests need:
NOTION_KEY=$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-Versionheader is required. This skill uses2025-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": [{"text": {"content": "..."}}]}{"rich_text": [{"text": {"content": "..."}}]}{"select": {"name": "Option"}}{"multi_select": [{"name": "A"}, {"name": "B"}]}{"date": {"start": "2024-01-15", "end": "2024-01-16"}}{"checkbox": true}{"number": 42}{"url": "https://..."}{"email": "a@b.com"}{"relation": [{"id": "page_id"}]}/data_sources/ endpoints for queries and retrievaldatabase_id and a data_source_id
database_id when creating pages (parent: {"database_id": "..."})data_source_id when querying (POST /v1/data_sources/{id}/query)"object": "data_source" with their data_source_idparent.data_source_id alongside parent.database_idGET /v1/data_sources/{data_source_id}is_inline: true when creating data sources to embed them in pagesEdit Lyra's own config, memory, and personality files from Telegram. Use when Akash asks to update memory, change behavior, add rules, update skills, or modify setup.
Chief of Staff workflows — morning prep, inbox triage, calendar sanity, canonical today focus, recruiter/outreach discipline. Use when Akash asks for EA mode, daily brief, or operations-style help.
When Akash gives feedback on a draft (post, outreach, email, thread). Ensures Voice Canon + channel rules are re-applied, not only literal edits.
Manage Google Calendar events via API. List, create, update, delete events and check availability across personal, work, and shared calendars.
Complete approved work in the same turn—no hollow "I'll update" replies; never paste JSON parse noise to chat. Use on "do it" or stuck runs.
Manage reminders via Notion databases. Three databases mirror Apple Reminders lists — Akash, Shared, and Abhigna. Use the Notion API to add, query, and complete reminders.