Read Page with Content
Replace with your actual Notion page ID:
```bash
# Get page metadata
bash -c 'curl -s -X GET "https://api.notion.com/v1/pages/" --header "Authorization: Bearer $NOTION_API_KEY" --header "Notion-Version: 2022-06-28" | jq '"'"'{title: .properties.title.title[0].plain_text, url, last_edited_time}'"'"
# Get page content blocks
bash -c 'curl -s -X GET "https://api.notion.com/v1/blocks//children?page_size=100" --header "Authorization: Bearer $NOTION_API_KEY" --header "Notion-Version: 2022-06-28" | jq '"'"'.results[] | {type, text: (.[.type].rich_text // [] | map(.plain_text) | join("")), has_children}'"'"
```
Read Nested Blocks (Toggle, etc.)
Blocks with has_children: true contain nested content. Replace with your actual block ID:
```bash
bash -c 'curl -s -X GET "https://api.notion.com/v1/blocks//children" --header "Authorization: Bearer $NOTION_API_KEY" --header "Notion-Version: 2022-06-28" | jq '"'"'.results[] | {type, text: (.[.type].rich_text // [] | map(.plain_text) | join(""))}'"'"
```
Search Workspace
Write to /tmp/notion_request.json:
```json
{
"query": "Meeting Notes",
"page_size": 10
}
```
Then run:
```bash
bash -c 'curl -s -X POST "https://api.notion.com/v1/search" --header "Authorization: Bearer $NOTION_API_KEY" --header "Notion-Version: 2022-06-28" --header "Content-Type: application/json" -d @/tmp/notion_request.json | jq '"'"'.results[] | {id, object, title: .properties.title.title[0].plain_text // .title[0].plain_text}'"'"
```
Docs: https://developers.notion.com/reference/post-search
List Database Entries
Write to /tmp/notion_request.json:
```json
{
"page_size": 100
}
```
Replace with your actual database ID and run:
```bash
bash -c 'curl -s -X POST "https://api.notion.com/v1/databases//query" --header "Authorization: Bearer $NOTION_API_KEY" --header "Notion-Version: 2022-06-28" --header "Content-Type: application/json" -d @/tmp/notion_request.json | jq '"'"'.results[] | {id, properties}'"'"
```
Docs: https://developers.notion.com/reference/post-database-query
Query with Filter
Replace with your actual database ID:
```bash
curl -s -X POST "https://api.notion.com/v1/databases//query" --header "Authorization: Bearer $NOTION_API_KEY" --header 'Notion-Version: 2022-06-28' --header 'Content-Type: application/json' -d @- << 'EOF'
{
"filter": {
"property": "Status",
"select": {"equals": "Done"}
},
"sorts": [{"property": "Date", "direction": "descending"}],
"page_size": 50
}
EOF
```
Query with Multiple Filters
Replace with your actual database ID:
```bash
curl -s -X POST "https://api.notion.com/v1/databases//query" --header "Authorization: Bearer $NOTION_API_KEY" --header 'Notion-Version: 2022-06-28' --header 'Content-Type: application/json' -d @- << 'EOF'
{
"filter": {
"and": [
{"property": "Status", "select": {"does_not_equal": "Archived"}},
{"property": "Due", "date": {"on_or_before": "2024-12-31"}}
]
}
}
EOF
```
Get Database Schema
Replace with your actual database ID:
```bash
bash -c 'curl -s "https://api.notion.com/v1/databases/" --header "Authorization: Bearer $NOTION_API_KEY" --header '"'"'Notion-Version: 2022-06-28'"'"' | jq '"'"'{title: .title[0].plain_text, properties: .properties | keys}'"'"
```
Docs: https://developers.notion.com/reference/retrieve-a-database
Get Page
Replace with your actual page ID:
```bash
bash -c 'curl -s "https://api.notion.com/v1/pages/" --header "Authorization: Bearer $NOTION_API_KEY" --header '"'"'Notion-Version: 2022-06-28'"'"' | jq '"'"'{id, url, properties}'"'"
```
Docs: https://developers.notion.com/reference/retrieve-a-page
Create Page in Database
```bash
curl -s -X POST 'https://api.notion.com/v1/pages' --header "Authorization: Bearer $NOTION_API_KEY" --header 'Notion-Version: 2022-06-28' --header 'Content-Type: application/json' -d @- << 'EOF'
{
"parent": {"database_id": "your-database-id"},
"properties": {
"Name": {"title": [{"text": {"content": "New Task"}}]},
"Status": {"select": {"name": "To Do"}},
"Due": {"date": {"start": "2024-12-31"}}
}
}
EOF
```
Docs: https://developers.notion.com/reference/post-page
Create Page with Content
```bash
curl -s -X POST 'https://api.notion.com/v1/pages' --header "Authorization: Bearer $NOTION_API_KEY" --header 'Notion-Version: 2022-06-28' --header 'Content-Type: application/json' -d @- << 'EOF'
{
"parent": {"page_id": "parent-page-id"},
"properties": {
"title": {"title": [{"text": {"content": "My New Page"}}]}
},
"children": [
{
"object": "block",
"type": "heading_2",
"heading_2": {"rich_text": [{"text": {"content": "Introduction"}}]}
},
{
"object": "block",
"type": "paragraph",
"paragraph": {"rich_text": [{"text": {"content": "This is the content."}}]}
}
]
}
EOF
```
Update Page Properties
Replace with your actual page ID:
```bash
curl -s -X PATCH "https://api.notion.com/v1/pages/" --header "Authorization: Bearer $NOTION_API_KEY" --header 'Notion-Version: 2022-06-28' --header 'Content-Type: application/json' -d @- << 'EOF'
{
"properties": {
"Status": {"select": {"name": "In Progress"}}
}
}
EOF
```
Docs: https://developers.notion.com/reference/patch-page
Archive Page
Write to /tmp/notion_request.json:
```json
{
"archived": true
}
```
Replace with your actual page ID and run:
```bash
bash -c 'curl -s -X PATCH "https://api.notion.com/v1/pages/" --header "Authorization: Bearer $NOTION_API_KEY" --header "Notion-Version: 2022-06-28" --header "Content-Type: application/json" -d @/tmp/notion_request.json'
```
Get Block Children
Replace with your actual block ID:
```bash
bash -c 'curl -s "https://api.notion.com/v1/blocks//children?page_size=100" --header "Authorization: Bearer $NOTION_API_KEY" --header '"'"'Notion-Version: 2022-06-28'"'"' | jq '"'"'.results[] | {type, id}'"'"
```
Docs: https://developers.notion.com/reference/get-block-children
Append Blocks to Page
Replace with your actual page ID:
```bash
curl -s -X PATCH "https://api.notion.com/v1/blocks//children" --header "Authorization: Bearer $NOTION_API_KEY" --header 'Notion-Version: 2022-06-28' --header 'Content-Type: application/json' -d @- << 'EOF'
{
"children": [
{
"object": "block",
"type": "paragraph",
"paragraph": {"rich_text": [{"text": {"content": "New paragraph added."}}]}
},
{
"object": "block",
"type": "to_do",
"to_do": {
"rich_text": [{"text": {"content": "Task item"}}],
"checked": false
}
}
]
}
EOF
```
Docs: https://developers.notion.com/reference/patch-block-children
Delete Block
Replace with your actual block ID:
```bash
curl -s -X DELETE "https://api.notion.com/v1/blocks/" --header "Authorization: Bearer $NOTION_API_KEY" --header 'Notion-Version: 2022-06-28'
```
List Users
```bash
bash -c 'curl -s '"'"'https://api.notion.com/v1/users'"'"' --header "Authorization: Bearer $NOTION_API_KEY" --header '"'"'Notion-Version: 2022-06-28'"'"' | jq '"'"'.results[] | {id, name, type}'"'"
```
Docs: https://developers.notion.com/reference/get-users
Get Current Bot
```bash
curl -s 'https://api.notion.com/v1/users/me' --header "Authorization: Bearer $NOTION_API_KEY" --header 'Notion-Version: 2022-06-28'
```
Create Database
```bash
curl -s -X POST 'https://api.notion.com/v1/databases' --header "Authorization: Bearer $NOTION_API_KEY" --header 'Notion-Version: 2022-06-28' --header 'Content-Type: application/json' -d @- << 'EOF'
{
"parent": {"page_id": "parent-page-id"},
"title": [{"text": {"content": "Task Tracker"}}],
"properties": {
"Name": {"title": {}},
"Status": {"select": {"options": [
{"name": "To Do", "color": "gray"},
{"name": "In Progress", "color": "blue"},
{"name": "Done", "color": "green"}
]}},
"Due Date": {"date": {}},
"Assignee": {"people": {}},
"Priority": {"select": {"options": [
{"name": "High", "color": "red"},
{"name": "Medium", "color": "yellow"},
{"name": "Low", "color": "green"}
]}}
}
}
EOF
```
Docs: https://developers.notion.com/reference/create-a-database