Notion
Connect Notion to your agents for reading and managing pages, databases, and workspace content.
Notion Integration
Notion provides access to pages, databases, and workspace search. Your agents can read page content, query databases, create new pages, and search across your entire workspace.
OAuth Setup
When you click Connect Notion on the dashboard, you are redirected to Notion's authorization page. Notion uses a capability-based model rather than traditional OAuth scopes -- you select which pages and databases the integration can access.
After authorization, your agent can access:
- Pages you explicitly shared with the integration
- Databases you explicitly shared with the integration
- Child pages and blocks within shared pages
Permissions
| Permission ID | Name | Type | Description |
|---|---|---|---|
notion.pages.read | Read pages | read | View pages and their content |
notion.pages.write | Manage pages | write | Create and update pages |
notion.databases.read | Read databases | read | Query databases and view entries |
notion.databases.write | Manage databases | write | Create and update database entries |
notion.search | Search | read | Search pages and databases across workspace |
Pages
Example Actions
Get page content:
curl -X GET "https://app.supyagent.com/api/v1/notion/pages/{pageId}" \
-H "Authorization: Bearer sk_live_..."Get page blocks (content elements):
curl -X GET "https://app.supyagent.com/api/v1/notion/pages/{pageId}/blocks" \
-H "Authorization: Bearer sk_live_..."Create a new page:
curl -X POST "https://app.supyagent.com/api/v1/notion/pages" \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"parent_id": "parent-page-id",
"title": "Meeting Notes - March 15",
"content": "## Attendees\n- Alice\n- Bob\n\n## Action Items\n- [ ] Review PR #42\n- [ ] Update docs"
}'What Agents Can Do
- Read page content and metadata
- List child pages
- Create new pages under a parent page
- Update page properties and content
- Archive pages
Databases
Example Actions
Query a database:
curl -X POST "https://app.supyagent.com/api/v1/notion/databases/{databaseId}/query" \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"filter": {
"property": "Status",
"select": {"equals": "In Progress"}
},
"sorts": [
{"property": "Due Date", "direction": "ascending"}
]
}'Create a database entry:
curl -X POST "https://app.supyagent.com/api/v1/notion/databases/{databaseId}/entries" \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"properties": {
"Name": "Implement dark mode",
"Status": "To Do",
"Priority": "High",
"Assignee": "Alice"
}
}'What Agents Can Do
- Query databases with filters and sorts
- List all entries in a database
- Create new database entries
- Update existing entry properties
- View database schema (properties and their types)
Search
Example Actions
Search across workspace:
curl -X POST "https://app.supyagent.com/api/v1/notion/search" \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"query": "product roadmap",
"filter": {"object": "page"}
}'What Agents Can Do
- Full-text search across all shared pages and databases
- Filter results by object type (page or database)
- Sort results by relevance or last edited time
Setup Notes
Sharing Pages with the Integration
After connecting Notion, you need to share specific pages or databases with the Supyagent integration:
- Open a Notion page or database
- Click Share in the top-right corner
- Search for "Supyagent" in the share dialog
- Click Invite
The integration can only access pages that have been explicitly shared. Child pages inherit access from their parent.
Notes
- Notion uses UUIDs for page and database IDs (e.g.,
a1b2c3d4-e5f6-7890-abcd-ef1234567890) - Page content is returned as blocks (paragraphs, headings, lists, code blocks, etc.)
- Database entries are returned as pages with properties matching the database schema
- Notion API rate limits: 3 requests per second per integration
- Rich text formatting (bold, italic, links) is preserved in block content