Skip to content

Knowledge Management

Notion
API integration

Ship Knowledge Management features without building the integration. Full Notion API access via Proxy, normalized data through Unified APIs, and 120+ MCP-ready tools for AI agents — all extensible to your exact use case.

Talk to us
Notion

Use Cases

Why integrate with Notion

Common scenarios for SaaS companies building Notion integrations for their customers.

01

Index Notion workspaces for AI-powered search and RAG

Enterprise search and AI copilot products can ingest their customers' Notion pages and databases to power retrieval-augmented generation. Truto handles the recursive block fetching and pagination so you can focus on your search index and LLM pipeline.

02

Push structured data into Notion databases as a reporting layer

SaaS products that generate data — deals closed, incidents resolved, experiments completed — can automatically create and update rows in their customers' Notion databases, giving non-technical stakeholders a live dashboard in the tool they already use.

03

Auto-generate formatted Notion pages from product artifacts

Meeting intelligence, analytics, and documentation tools can create rich Notion pages with headings, checklists, and embedded content, turning outputs like transcripts, reports, or changelogs into well-structured documents in the customer's workspace.

04

Sync task and ticket status bidirectionally with Notion databases

Project management and support tools can keep Notion database rows in sync with their own task states, so teams that track work in Notion always see the latest status without manual updates.

05

Surface Notion wiki content inside your product's UI

Help desk and enablement platforms can pull relevant Notion pages and blocks into their agent or employee workspace, giving users instant access to internal knowledge without leaving your app.

What You Can Build

Ship these features with Truto + Notion

Concrete product features your team can ship faster by leveraging Truto’s Notion integration instead of building from scratch.

01

Recursive page content ingestion pipeline

Fetch a Notion page and all its nested block children to extract full document content for indexing, summarization, or cross-platform search.

02

Automated meeting notes database writer

Create a new row in a customer's Notion meeting notes database with structured properties (date, attendees, duration) and append the transcript as formatted blocks.

03

Two-way database row sync engine

Query a Notion database with filters to find matching rows, then create or update page properties to keep external records and Notion in sync.

04

Notion-powered knowledge base widget

Use search and block retrieval to surface relevant Notion wiki articles directly inside your product's support agent or employee workspace.

05

File and media asset extractor

Download files hosted in Notion page properties or blocks using the files download capability, enabling backup, migration, or re-hosting workflows.

06

Comment thread sync for contextual collaboration

Pull comments attached to Notion pages or blocks into your platform's activity feed to keep conversation context connected across tools.

SuperAI

Notion AI agent tools

Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.

list_all_notion_users

List all users in Notion workspace. Returns user objects including id, type, name, email (for person type), and avatar_url.

get_single_notion_user_by_id

Get information about a specific user in Notion by user_id. Returns user id, type, email, name, and avatar_url.

create_a_notion_legal_hold_user

Add users to a Notion legal hold. Returns the updated legal hold object including id, status, and users (ids, total). Required: legal_hold_id, user_ids.

delete_a_notion_legal_hold_user_by_id

Remove a user from a Notion legal hold. Returns the updated legal hold object including id, status, and remaining users. Required: legal_hold_id, id.

list_all_notion_databases

List data sources (the queryable tables inside Notion databases) via search with filter object = data_source (Notion API 2026-03-11). Each result is a data_source object with id, name/title, properties (schema), parent.database_id and in_trash. Optional query text matches titles. Use the data_source id with data_source_queries.create to read rows, and with pages.create as parent.data_source_id. Note: databases themselves are containers; a database can hold several data sources.

get_single_notion_database_by_id

Get a Notion database container by id (GET /v1/databases/{id}, API version 2026-03-11). Returns id, title, description, icon, cover, url, parent, is_inline, in_trash and the data_sources array (id and name of each data source). The property schema is no longer here; call data_sources.get with a data source id for properties. Required: id, a database id (from a notion.so URL or a page parent.database_id). Not a data source id: list_databases returns data source ids, and those 404 here; use get_single_notion_data_source_by_id for them.

update_a_notion_database_by_id

Update a Notion database container (PATCH /v1/databases/{id}, API version 2026-03-11): title, description, icon, cover, is_inline, is_locked, parent (move) or in_trash. Property schema changes are not accepted here; use data_sources.update for properties. Required: id. Returns the updated database with its data_sources list.

create_a_notion_database

Create a new database in Notion under a specified parent page or workspace. Returns the created database object including id, object, title, parent, url, created_time, last_edited_time, and properties. Required: parent. The title and description arrays accept up to 100 rich text items each; is_inline defaults to false.

list_all_notion_pages

Returns a list of pages in Notion that match the query. Each result includes page-specific fields such as id, created_time, last_edited_time, created_by, last_edited_by, cover, icon, parent, in_trash, properties, and url (Notion API version 2026-03-11: the trash flag is in_trash; archived is no longer returned.)

get_single_notion_page_by_id

Get information about a specific page in Notion using id. Returns page properties including created_time, last_edited_time, created_by, last_edited_by, cover, icon, parent, in_trash, and properties. Note: properties with more than 25 references may be incomplete. (Notion API version 2026-03-11: the trash flag is in_trash; archived is no longer returned.)

create_a_notion_page

Create a page in Notion (POST /v1/pages, API version 2026-03-11) as a database row (parent data_source_id, preferred) or as a child of a page (parent page_id). Properties must match the data source schema; the title property is required. Returns the page with id, url, parent, properties, created_time, last_edited_time and in_trash.

update_a_notion_page_by_id

Update properties, icon, cover, or trash status of a page in Notion by page id. Returns updated page object including id, created_time, last_edited_time, cover, icon, parent, in_trash, and properties. (Notion API version 2026-03-11: the trash flag is in_trash; archived is no longer returned.)

delete_a_notion_page_by_id

Move a Notion page to the trash (PATCH /v1/pages/{id} with in_trash = true, API version 2026-03-11). The page is not permanently deleted; restore it with pages.update and in_trash = false. Required: id. Returns the page with in_trash true.

list_all_notion_comments

Get a list of un-resolved comments for a specific block or page in Notion. Requires block_id. Returns comment id, parent page_id, discussion_id, created_time, last_edited_time, created_by user id, and rich_text content.

create_a_notion_comment

Create a comment in a Notion page or existing discussion thread. Returns: object, id, parent, discussion_id, created_time, last_edited_time, created_by, rich_text. Required: rich_text, plus either `parent` (to start a new page/block discussion) or `discussion_id` (to reply in an existing thread).

delete_a_notion_comment_by_id

Delete a Notion comment by id. Returns the deleted comment object including its id, parent, created_time, last_edited_time, created_by, and rich_text. Required: id.

get_single_notion_comment_by_id

Retrieve a comment. Required: id.

update_a_notion_comment_by_id

Update the content of a Notion comment by id. The request body accepts either a rich_text array or a markdown string (mutually exclusive). Returns the updated comment object including object, id, parent, rich_text, created_time, and last_edited_time. Required: id, and either rich_text or markdown.

get_single_notion_pages_property_by_id

Get a property item for a given page id and property_id in Notion. Returns property_item objects including type and value details. Use for properties with more than 25 references to get complete lists.

list_all_notion_block_children

Get child blocks of a block by id in Notion. Returns an array of block objects including id, parent, created_time, last_edited_time, created_by, last_edited_by, has_children, in_trash, type, and block content details. (Notion API version 2026-03-11: the trash flag is in_trash; archived is no longer returned.)

create_a_notion_block_child

Append new child blocks to a page or block in Notion (PATCH /v1/blocks/{block_id}/children, API version 2026-03-11). Place them with the position object: {"type":"end"} (default), {"type":"start"} or {"type":"after_block","after_block":{"id":""}}. The old after parameter is rejected in this version. Required: block_id and children. Returns the created block objects with id, parent, type, has_children and in_trash.

update_a_notion_block_child_by_id

Update a block by id in Notion. Returns the updated block object including id, parent page_id, created_time, last_edited_time, created_by and last_edited_by user ids, has_children, in_trash status, type, and content fields. (Notion API version 2026-03-11: the trash flag is in_trash; archived is no longer returned.)

delete_a_notion_block_child_by_id

Delete a block by setting its in_trash property to true in Notion. Requires id. Returns the block object with fields id, parent, created_time, last_edited_time, created_by, last_edited_by, has_children, in_trash, type, and paragraph. (Notion API version 2026-03-11: the trash flag is in_trash; archived is no longer returned.)

list_all_notion_search

Search pages and data sources the integration can access (POST /v1/search, API version 2026-03-11). Optional query text matches titles. filter.property must be object with filter.value page or data_source (database is no longer a valid value); filter.in_trash true lists trashed items. Results carry object = page or data_source; data sources include parent.database_id. Sort by last_edited_time ascending or descending. Paginated with start_cursor.

list_all_notion_query_database

Query the rows (pages) of a Notion data source (POST /v1/data_sources/{id}/query, API version 2026-03-11). The database_id parameter takes the data source id, which is the id returned by databases.list and by search results with object data_source. A Notion URL or a page parent.database_id gives a database id instead: call databases.get with it and use data_sources[].id (a database can hold several data sources). Supports filter, sorts and cursor pagination. Returns page objects whose parent carries data_source_id and database_id.

list_all_notion_me

Get the bot user associated with the API token in Notion. Returns user id, name, avatar_url, type, and owner details including owner's id, name, and email.

notion_me_self

Get the Notion bot user associated with the current token. Returns: object, id, name, avatar_url, type, bot.owner. No required parameters.

notion_files_download

Use this endpoint to download files from a Notion page property (such as files or media)

get_single_notion_block_by_id

Retrieve a block in Notion using id. Returns object type, parent, created_time, last_edited_time, created_by, last_edited_by, has_children, in_trash, and content type details for the block. (Notion API version 2026-03-11: the trash flag is in_trash; archived is no longer returned.)

create_a_notion_export

Enqueue a Notion workspace export job (admin API, base URL https://api.notion.com/admin). Returns: export_job_id and status for tracking the export via async_tasks.get. Required: export_type, on_behalf_of_user_email, and space_id (space_id is sent as part of the URL path).

create_a_notion_legal_hold_export

Export a Notion legal hold. Returns: legal_hold_export_id. Required: legal_hold_id and requesting_user_id, plus either legal_hold_export_id (to re-export an existing export) or space_id (to start a new export).

list_all_notion_legal_holds

List Notion legal holds. Returns an array of holds each including id, status, name, start_date, user_interaction_type, users, and workspaces. Optionally filter by user_id.

get_single_notion_legal_hold_by_id

Get a single Notion legal hold by id. Returns the full hold object including id, status, name, start_date, user_interaction_type, users, workspaces, created_by, and created_time. Required: id.

create_a_notion_legal_hold

Create a Notion legal hold. Returns the created hold including id, status, created_by, start_date, users, and workspaces. Required: name, start_date, user_ids, user_interaction_type.

update_a_notion_legal_hold_by_id

Update a Notion legal hold's name, description, or icon by id. Returns the updated hold object including id, status, name, start_date, users, and workspaces. Required: id.

list_all_notion_workspaces

List workspaces on a Notion legal hold. Returns an array of workspace_ids associated with the specified legal hold. Required: legal_hold_id.

create_a_notion_release

Release a Notion legal hold, transitioning its status to 'released'. Returns the updated legal hold object including id, status, user_interaction_type, users, and workspaces. Required: legal_hold_id.

create_a_notion_managed_users_revoke_session

Revoke all active sessions for a Notion managed user. Returns status: "revoked" on success. Required: user (identify by email using type "email", or by user id using type "id").

create_a_notion_data_source_query

Query a Notion data source (database) using filters and sorts. Returns the matching database entries with content-type-specific fields. Required: data_source_id.

list_all_notion_data_source_templates

List templates in a Notion data source. Returns each template's id, name, and is_default. Required: data_source_id.

create_a_notion_data_source

Create a new Notion data source (database). Returns the data source object including object, id, title, description, parent, database_parent, is_inline, in_trash, created_time, last_edited_time, created_by, last_edited_by, properties, icon, cover, url, and public_url. Required: parent, properties.

get_single_notion_data_source_by_id

Get metadata and schema for a Notion data source by id. Returns the data source object including object, id, title, description, parent, database_parent, is_inline, in_trash, created_time, last_edited_time, created_by, last_edited_by, properties, icon, cover, url, and public_url. Required: id.

update_a_notion_data_source_by_id

Update a Notion data source's properties. Returns the data source object including object, id, title, description, parent, database_parent, is_inline, in_trash, created_time, last_edited_time, created_by, last_edited_by, properties, icon, cover, url, and public_url. Required: id.

list_all_notion_page_markdowns

Get a Notion page rendered as enhanced Markdown. Returns: object, id, markdown, truncated, unknown_block_ids. Required: page_id.

notion_page_markdowns_bulk_update

Update a Notion page's content using enhanced Markdown. Returns the updated page markdown object including id, markdown, truncated, and unknown_block_ids. Required: page_id, type. The matching operation object for the chosen type must also be supplied; insert_content and replace_content_range are deprecated.

create_a_notion_page_move

Move a Notion page to a different parent location. Returns an empty 200 response on success. Required: page_id, parent.

notion_admin_agents_bulk_delete

Delete a custom agent in a Notion space. The personal agent (Notion AI) is not supported. Returns an empty 204 response on success. Required: space_id, agent_id.

notion_admin_agents_get_credit_usage

Get premium AI credit usage for a single custom agent in a Notion space. Returns: id, status, type, code, message. Required: space_id, agent_id.

notion_admin_agents_get_permissions

Get the sharing permissions for a custom agent in a Notion space. Returns: permissions, next_cursor, code, status, message. Required: space_id, agent_id.

list_all_notion_admin_agents

List custom and database (autofill) agents in a Notion space with optional filters. Returns: id, code, status, message. Required: space_id.

notion_admin_agents_list_credit_usage

List premium AI credit usage for all agents in a Notion space. Returns: id, code, status, message. Required: space_id.

notion_admin_agents_update_creation_policy

Update who can create Notion agents in a space by setting the creation policy. Returns: agent_counts, current_policy, current_policy_description, space_id, space_name. Required: space_id, policy.

notion_admin_agents_update_credit_limit

Set the per-agent credit limit for a Notion custom agent in a space. Returns: credit_limit_by_workspace_admin, enforced_credit_limit, current_credit_usage, did_clear_paused_state, is_active. Required: space_id, agent_id, credit_limit. The personal agent (Notion AI) is not supported.

notion_admin_agents_update_permissions

Update sharing permissions for a Notion custom agent by granting and revoking principal access. Returns: permissions, code, status, message. Required: space_id, agent_id.

notion_admin_agents_update_status

Disable or re-enable a Notion custom agent in a space. Returns: admin_status, run_status, paused_reason. Required: space_id, agent_id, admin_status. Requests are rejected with validation_error when the agent is blocked by a credit or operational pause reason.

notion_admin_legal_holds_add_users

Add users to a legal hold in Notion. Returns the updated legal hold object including id, name, status, users, workspaces, created_by, created_time, and start_date. Required: legal_hold_id, user_ids.

create_a_notion_admin_legal_hold

Create a legal hold in Notion. Returns the created legal hold object including id, name, status, users, workspaces, created_by, created_time, and start_date. Required: name, start_date, user_ids, user_interaction_type.

notion_admin_legal_holds_export

Export a legal hold in Notion. Returns: legal_hold_export_id. Required: legal_hold_id, legal_hold_export_id, requesting_user_id.

get_single_notion_admin_legal_hold_by_id

Get a single Notion legal hold by id. Returns: id, status, code, message. Required: id.

list_all_notion_admin_legal_holds

List all Notion legal holds for your organization, both active and released. Returns: id, status, code, message. The API does not guarantee a particular sort order for returned results.

notion_admin_legal_holds_list_pages

List pages on a legal hold in Notion. Returns: page_ids, code, status, message. Required: legal_hold_id, space_id.

notion_admin_legal_holds_list_users

List users on a legal hold in Notion. Returns: user_ids, code, status, message. Required: legal_hold_id.

notion_admin_legal_holds_list_workspaces

List workspaces on a legal hold in Notion. Returns: workspace_ids, code, status, message. Required: legal_hold_id.

notion_admin_legal_holds_release

Release a legal hold in Notion, setting its status to released. Returns the full legal hold object including id, name, status, created_by, created_time, users, and workspaces. Required: legal_hold_id.

notion_admin_legal_holds_remove_user

Remove a user from a legal hold in Notion. Returns the full legal hold object including id, name, status, created_by, created_time, users, and workspaces. Required: legal_hold_id, user_id.

update_a_notion_admin_legal_hold_by_id

Update a legal hold in Notion by id. Returns: id, status, code, message. Required: id.

list_all_notion_admin_mcp_client_connections

List MCP client connections in a Notion organization. Each result groups a member, an MCP client, and the workspaces where they are connected. Returns: created_at, code, status, message. Optional filters by user_ids and workspace_ids. Max 100 results per page.

notion_admin_mcp_client_connections_revoke

Revoke active OAuth tokens for a member's MCP client connection in a Notion workspace. Returns: revoked_token_count. Required: client_key, user_id, workspace_id. Revoking disconnects the member but does not prevent reconnection if workspace policy allows it.

admin_mcp_client_connections_update_enterprise_managed_access

Deny or restore a member's enterprise-managed MCP client access in a Notion workspace. Returns: revoked_token_count. Required: access, user_id, workspace_id. Applies only to enterprise-managed connections; the same request can be repeated safely.

list_all_notion_admin_personal_access_tokens

List personal access tokens in a Notion workspace. Returns each token record with id, name, created_at, creator, expires_at, last_used_at, revoked_at, and revoked_by. Token values are never returned. Use the id from a result as bot_id when revoking. Required: space_id.

notion_admin_personal_access_tokens_revoke

Revoke a personal access token in a Notion workspace. Use the id from List personal access tokens as the bot_id. After revocation the token can no longer authenticate API requests or access Notion Workers. Returns an empty response on success. Required: space_id, bot_id.

create_a_notion_admin_space_export

Enqueue a Notion workspace (space) export job. Returns: export_job_id, status. Required: space_id, export_type, on_behalf_of_user_email.

get_single_notion_admin_space_export_by_id

Get the status of a Notion workspace (space) export job by id. Returns: export_job_id, status, code, message. Required: space_id, id.

notion_admin_workspace_update_credit_limit

Update the default agent credit limit for a Notion workspace. The limit is a non-negative whole number of credits applied to agents going forward; pass null to remove the workspace-wide default cap. Returns: default_agent_credit_limit, space_id. Required: space_id, default_agent_credit_limit.

get_single_notion_async_task_by_id

Get a Notion async task by id. Returns the task object including its object type, id, status, status_url, created_time, operation, and poll_after_seconds. Required: id.

create_a_notion_blocks_meeting_note

Create a meeting note in Notion from a file upload or an existing audio/video block. Returns: object, id, type, message, code, status, additional_data. Required: source (with type and file_upload_id plus parent for file uploads, or block_id for block sources).

list_all_notion_custom_emojis

List custom emojis. Returns: id, name, url.

notion_file_uploads_complete

Complete a multi-part file upload in Notion after all file parts have been sent. Returns: object, id, created_time, created_by, last_edited_time, in_trash, expiry_time, status, filename, content_type, content_length, upload_url, complete_url, file_import_result, number_of_parts. Required: file_upload_id.

create_a_notion_file_upload

Create a file upload in Notion to begin uploading a file via single-part, multi-part, or external URL mode. Returns: object, id, created_time, created_by, last_edited_time, in_trash, expiry_time, status, filename, content_type, content_length, upload_url, complete_url, file_import_result, number_of_parts. Mode defaults to single_part; use multi_part for files larger than 20MB.

get_single_notion_file_upload_by_id

Retrieve a single Notion file upload by id. Returns: object, id, created_time, created_by, last_edited_time, in_trash, expiry_time, status, filename, content_type, content_length, upload_url, complete_url, file_import_result, number_of_parts. Required: id.

list_all_notion_file_uploads

List Notion file uploads, optionally filtered by status. Returns file upload records including id, object, created_time, filename, content_type, content_length, number_of_parts. Max 100 per page.

notion_file_uploads_send

Upload file contents to a Notion file upload object, sending either the complete file or a single part for multi-part uploads. Returns: object, id, created_time, created_by, last_edited_time, in_trash, expiry_time, status, filename, content_type, content_length, upload_url, complete_url, file_import_result, number_of_parts. Required: file_upload_id, file.

create_a_notion_meeting_notes_query

Query meeting notes in Notion with optional combinator (and/or) and property-level filtering, plus multi-key sort. Returns meeting note blocks with id, type, meeting_notes (title, status, children, calendar_event, recording), created_time, last_edited_time, created_by, last_edited_by, has_children, and in_trash. Maximum 50 results per page.

create_a_notion_oauth_introspect

Introspect a Notion OAuth access token to check whether it is currently active. Returns: active, scope, iat, request_id. Required: token.

create_a_notion_oauth_revoke

Revoke a Notion OAuth token by providing the token string. Returns: request_id. Required: token.

create_a_notion_oauth_token

Exchange a Notion OAuth authorization code for access and refresh tokens, or refresh an existing token. Returns: access_token, token_type, refresh_token, bot_id, workspace_icon, workspace_name, workspace_id, owner, duplicated_template_id, request_id. Required: grant_type (use code for authorization_code grant, or refresh_token for refresh_token grant).

notion_view_queries_bulk_delete

Delete a view query in Notion by specifying the view and query identifiers. Returns: object, id, deleted. Required: view_id, query_id.

create_a_notion_view_query

Create a view query in Notion for a specific view. Returns: object, id, view_id, expires_at, total_count, results, next_cursor, has_more, request_status. Required: view_id.

list_all_notion_view_queries

Get view query results. Returns: object, id. Required: view_id, query_id.

create_a_notion_view

Create a new view in Notion. Returns the view object including object, id, name, type, data_source_id, and database_id. Required: name, type. At least one of database_id or data_source_id must identify the parent.

delete_a_notion_view_by_id

Delete a Notion view by id. Returns the deleted view object including object, id, name, type, data_source_id, and database_id. Required: id.

get_single_notion_view_by_id

Retrieve a view. Required: id.

list_all_notion_views

List views. Returns: object, id.

update_a_notion_view_by_id

Update a Notion view by id. Returns the updated view object including its object type, id, and name. Required: id.

notion_admin_managed_users_revoke_session

Revoke a Notion managed user's sessions by identifying the user by email. Returns: status. Required: user (an object containing email and type, where type is "email").

notion_agent_credit_limits_bulk_update

Update an agent's per-agent credit limit in Notion. Returns: agent_id, credit_limit, last_edited_time. Required: agent_id and credit_limit (non-negative integer, or null to clear the limit). Not supported for the personal agent (Notion AI).

list_all_notion_agent_insights

Get insights for a Notion agent. Returns: object, id, agent_type, status, pause_reason, created_by, total_credits_used, credit_limit, runs_completed. Required: agent_id (a UUID, or `notion_ai` for the personal agent). Supply start_time and end_time together as epoch seconds; if either is omitted the window defaults to the current billing period.

notion_agent_status_bulk_update

Update the status of a Notion agent, re-enabling a previously disabled agent or turning off a running one. Returns: agent_id, status, pause_reason, last_edited_time. Required: agent_id and status. Pass `notion_ai` as agent_id to target the personal agent.

delete_a_notion_agent_by_id

Delete a Notion agent by id. Returns: agent_id, status, deleted_at. The agent is soft-deleted (recoverable); the personal agent (`notion_ai`) cannot be deleted. Required: id.

get_single_notion_agent_by_id

Get a Notion agent by id (a UUID, or `notion_ai` for the personal agent). Returns the agent object with id, agent_type, name, description, model, connections, status, triggers, created_time, and last_edited_time. Required: id.

create_a_notion_agents_batch

Apply a batch of agent operations in Notion — enable or disable agents, set or clear credit limits, or soft-delete them. Returns the async task including its id, status, status_url, created_time, operation, and poll_after_seconds. Required: operations (1–100 items; the batch is not atomic — per-operation outcomes are reported in the task result).

create_a_notion_agents_query

Query agents in Notion: search agent names and descriptions by case-insensitive substring, then filter, sort, and page through Notion AI and custom agents. Returns: object, id, agent_type, name, description, instructions_page_id, icon, created_by, status, created_time, favorited, connections, model_mode, agent_version, last_run_at. Max 100 per page.

get_single_notion_ai_plugin_by_id

Get a Notion AI plugin directory by id. Returns the directory object including its id, version_id (opaque identifier to compare for changes), and url (temporary signed download URL for the gzipped tar archive). Required: id.

list_all_notion_ai_plugins

List Notion skills plugins available to the integration. Returns each plugin summary with its id, name, description, and version_id (opaque identifier to compare for changes). Max 100 per page.

get_single_notion_ai_skill_by_id

Get the skill directory for a Notion skill page by id. Returns: id, version_id, url. Required: id.

create_a_notion_events_query

Query the events of a Notion Agent session by session_id, optionally filtered by id, event type, sequence, or created_at. Returns matching session events including id, type, sequence, created_at, content, and created_by. Required: session_id. Max 100 events per page.

notion_sessions_cancel

Cancel an in-progress Notion agent session turn. Optionally pass event_id to cancel a specific turn; otherwise the current non-terminal turn is canceled. Returns the session object with its updated status (canceled) and metadata. Required: session_id.

get_single_notion_session_by_id

Retrieve a Notion agent session by id. Returns the session object with status (queued, in_progress, requires_action, completed, failed, canceled, terminated), agent_id, title, created_by, agent_version, models, required_actions awaiting your approval, and error. Messages and agent thinking are not included; read them with events_queries.create. Required: id (session id).

update_a_notion_session_by_id

Start a Notion agent session or continue one. Omit session_id and pass agent_id plus message to start a session with a Custom Agent (or `notion_ai`); pass session_id plus message to send a follow-up; pass session_id plus actions to approve or reject the session's required_actions. Returns the session object: id, agent_id, title, status (queued, in_progress, requires_action, completed, failed, canceled, terminated), created_at, updated_at, required_actions and error. The agent runs asynchronously; poll sessions.get for status and read replies with events_queries.create. Required: message (new session or follow-up) or session_id with actions.

create_a_notion_sessions_query

Query agent sessions in Notion by title substring, property filter, and sort order. Returns: object, id, agent_id, title, status, created_by, agent_version, models, created_at, updated_at, required_actions, error, trigger_type, type_labels, chat_user_emails, tool_types, tool_call_count, credits_used, runs_completed, message_count. Max 100 per page; access filtering can return an empty page while…

list_all_notion_admin_permission_groups

List permission groups in a Notion workspace. Returns each group with id and name; paginate with start_cursor and page_size. Requires an organization bot token (Admin API, Enterprise plan) with scope permission-group:read. Required: space_id.

create_a_notion_admin_permission_group

Create an admin-managed permission group in a Notion workspace. Returns the created group with id and name. Requires an organization bot token (Admin API, Enterprise plan) with scope permission-group:write. Required: space_id, name.

get_single_notion_admin_permission_group_by_id

Retrieve a permission group in a Notion workspace by id. Returns the group with id and name. Requires an organization bot token (Admin API, Enterprise plan) with scope permission-group:read. Required: space_id, id.

update_a_notion_admin_permission_group_by_id

Rename an admin-managed permission group in a Notion workspace. Returns the updated group with id and name. Requires an organization bot token (Admin API, Enterprise plan) with scope permission-group:write. Required: space_id, id, name.

delete_a_notion_admin_permission_group_by_id

Delete an admin-managed permission group in a Notion workspace. Optionally pass transfer_to_owner_id to transfer the group's content ownership to a user. Returns the deleted group with id and name. Requires an organization bot token (Admin API, Enterprise plan) with scope permission-group:write. Required: space_id, id.

list_all_notion_admin_permission_group_members

List the direct user memberships of a permission group in a Notion workspace. Returns group_id, member (type user, user_id) and role (owner or member) per membership; paginate with start_cursor and page_size. Requires an organization bot token (Admin API, Enterprise plan) with scope permission-group:read. Required: space_id, group_id.

create_a_notion_admin_permission_group_member

Add a direct user member to an admin-managed permission group in a Notion workspace. Returns the membership with group_id, member and role. Requires an organization bot token (Admin API, Enterprise plan) with scope permission-group:write. Required: space_id, group_id, member (type user, user_id), role.

update_a_notion_admin_permission_group_member_by_id

Change a direct member's role in an admin-managed permission group in a Notion workspace. Returns the updated membership with group_id, member and role. Requires an organization bot token (Admin API, Enterprise plan) with scope permission-group:write. Required: space_id, group_id, id (user id), role.

delete_a_notion_admin_permission_group_member_by_id

Remove a direct user member from an admin-managed permission group in a Notion workspace. Returns the removed membership with group_id, member and role. Requires an organization bot token (Admin API, Enterprise plan) with scope permission-group:write. Required: space_id, group_id, id (user id).

list_all_notion_admin_users

List active workspace members and guest bots in a Notion workspace. Returns id, name, avatar_url, type (person or bot), membership_type and person.email; paginate with start_cursor and page_size. Requires an organization bot token (Admin API, Enterprise plan) with scope user:read. Required: space_id.

list_all_notion_admin_analytics_reports

List analytics reports generated for a Notion workspace. Returns id, report_type (user_activity, content_pages, ai_usage), status, date range, file_format and expiry per report; paginate with start_cursor and page_size. Requires an organization bot token (Admin API, Enterprise plan) with scope analytics:user-activity, analytics:page-content or analytics:ai-analytics. Required: workspace_id.

get_single_notion_database_lookup_by_id

Internal: resolve a Notion database ID to its data sources. Returns empty data_sources on 404 so data source IDs pass through.

Why Truto

Why use Truto’s MCP server for Notion

Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 850+ integrations.

01

Auto-generated, always up to date

Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.

02

Fine-grained access control

Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.

03

Multi-tenant by design

Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.

04

Works with every MCP client

Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.

05

Built-in auth, rate limits, and error handling

Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.

06

Expiring and auditable servers

Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.

For your product

Ship Notion tools in your product

Give the AI in your product access to each customer’s own Notion account, with one MCP server per connected account.

Rather talk it through? Book a demo

Elaichi

For your own team

Use Notion in ChatGPT or Claude yourself

Connect your company’s Notion once, then ask in the AI you already use, with exactly your own access.

From the team behind Truto · 14-day free trial

Unified APIs

Unified APIs for Notion

Skip writing code for every integration. Use Truto’s category-specific Unified APIs out of the box or customize the mappings with AI.

Unified Knowledge Base API

Files

View Docs

Page-Content

Represents the content of a page

View Docs

Pages

Represents the pages, posts, articles in a knowledge base

View Docs

Users

The User object represents a User.

View Docs

Unified User Directory API

Users

The User object represents a User.

View Docs

Unified Search API

Search

Search endpoint for all the apps.

View Docs

How It Works

From zero to integrated

Go live with Notion in under an hour. No boilerplate, no maintenance burden.

01

Link your customer’s Notion account

Use Truto’s frontend SDK to connect your customer’s Notion account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.

02

We handle authentication

Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.

03

Call our API, we call Notion

Truto’s Proxy API is a 1-to-1 mapping of the Notion API. You call us, we call Notion, and pass the response back in the same cycle.

04

Unified response format

Every response follows a single format across all integrations. We translate Notion’s pagination into unified cursor-based pagination. Data is always in the result attribute.

FAQs

Common questions about Notion on Truto

Authentication, rate limits, data freshness, and everything else you need to know before you integrate.

How does authentication work for Notion integrations through Truto?

undefined

How do I read the full content of a Notion page?

Notion pages contain metadata and properties but not body content directly. You first retrieve the page with get_single_notion_page_by_id, then recursively fetch its content using list_all_notion_block_children. Each block (paragraph, heading, list item, etc.) is returned individually.

How are Notion database rows represented in the API?

In Notion, every database row is technically a Page with a parent database ID. You create rows using create_a_notion_page with the database as the parent and pass structured properties. You update row properties with update_a_notion_page_by_id.

Can I filter and query specific rows in a Notion database?

Yes. The list_all_notion_query_database tool lets you pass filter and sort criteria to retrieve specific rows from a database — for example, all items where Status equals 'In Progress'. Truto handles pagination for large result sets.

Which Unified APIs map to Notion?

Notion is supported through three Unified APIs: the Unified Knowledge Base API (covering Files, Page-Content, Pages, and Users), the Unified User Directory API (Me and Users), and the Unified Search API (Search). These let you use a standardized schema across Notion and other knowledge management tools.

Can I delete pages and blocks through the integration?

Yes. Both delete_a_notion_page_by_id and delete_a_notion_block_child_by_id are supported. Note that Notion's API archives items rather than permanently deleting them, consistent with Notion's native trash behavior.

Notion

Get Notion integrated into your app

Our team understands what it takes to make a Notion integration successful. A short, crisp 30 minute call with folks who understand the problem.