Notion · Capability

Notion API

The Notion API allows developers to integrate with Notion workspaces programmatically. Build integrations that connect Notion with other tools, automate workflows, and manage workspace content including pages, databases, blocks, users, comments, and search. Notion is an all-in-one workspace that combines notes, tasks, wikis, and databases into a flexible, collaborative platform.

Run with Naftiko NotionAPI

What You Can Do

POST
Createpage — Notion Create a page
/pages
GET
Retrievepage — Notion Retrieve a page
/pages/{page_id}
PATCH
Updatepage — Notion Update page properties
/pages/{page_id}
GET
Retrievepageproperty — Notion Retrieve a page property item
/pages/{page_id}/properties/{property_id}
POST
Createdatabase — Notion Create a database
/databases
GET
Retrievedatabase — Notion Retrieve a database
/databases/{database_id}
PATCH
Updatedatabase — Notion Update a database
/databases/{database_id}
POST
Querydatabase — Notion Query a database
/databases/{database_id}/query
GET
Retrieveblock — Notion Retrieve a block
/blocks/{block_id}
PATCH
Updateblock — Notion Update a block
/blocks/{block_id}
DELETE
Deleteblock — Notion Delete a block
/blocks/{block_id}
GET
Retrieveblockchildren — Notion Retrieve block children
/blocks/{block_id}/children
PATCH
Appendblockchildren — Notion Append block children
/blocks/{block_id}/children
GET
Listusers — Notion List all users
/users
GET
Retrieveuser — Notion Retrieve a user
/users/{user_id}
GET
Retrievebotuser — Notion Retrieve the bot user
/users/me
POST
Search — Notion Search by title
/search
GET
Listcomments — Notion Retrieve comments
/comments
POST
Createcomment — Notion Create a comment
/comments

MCP Tools

createpage

Notion Create a page

retrievepage

Notion Retrieve a page

read-only idempotent
updatepage

Notion Update page properties

retrievepageproperty

Notion Retrieve a page property item

read-only idempotent
createdatabase

Notion Create a database

retrievedatabase

Notion Retrieve a database

read-only idempotent
updatedatabase

Notion Update a database

querydatabase

Notion Query a database

retrieveblock

Notion Retrieve a block

read-only idempotent
updateblock

Notion Update a block

deleteblock

Notion Delete a block

idempotent
retrieveblockchildren

Notion Retrieve block children

read-only idempotent
appendblockchildren

Notion Append block children

listusers

Notion List all users

read-only idempotent
retrieveuser

Notion Retrieve a user

read-only idempotent
retrievebotuser

Notion Retrieve the bot user

read-only idempotent
search

Notion Search by title

listcomments

Notion Retrieve comments

read-only idempotent
createcomment

Notion Create a comment

Capability Spec

notion-capability.yaml Raw ↑
naftiko: 1.0.0-alpha2
info:
  label: Notion API
  description: The Notion API allows developers to integrate with Notion workspaces programmatically. Build integrations that
    connect Notion with other tools, automate workflows, and manage workspace content including pages, databases, blocks,
    users, comments, and search. Notion is an all-in-one workspace that combines notes, tasks, wikis, and databases into a
    flexible, collaborative platform.
  tags:
  - Notion
  - API
  created: '2026-05-06'
  modified: '2026-05-06'
capability:
  consumes:
  - type: http
    namespace: notion
    baseUri: https://api.notion.com/v1
    description: Notion API HTTP API.
    authentication:
      type: bearer
      token: '{{NOTION_TOKEN}}'
    resources:
    - name: pages
      path: /pages
      operations:
      - name: createpage
        method: POST
        description: Notion Create a page
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: pages-page-id
      path: /pages/{page_id}
      operations:
      - name: retrievepage
        method: GET
        description: Notion Retrieve a page
        inputParameters:
        - name: page_id
          in: path
          type: string
          required: true
          description: The ID of the page to retrieve.
        - name: filter_properties
          in: query
          type: array
          description: A list of page property value IDs to include in the response. If provided, only the specified properties
            will be returned.
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updatepage
        method: PATCH
        description: Notion Update page properties
        inputParameters:
        - name: page_id
          in: path
          type: string
          required: true
          description: The ID of the page to update.
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: pages-page-id-properties-property-id
      path: /pages/{page_id}/properties/{property_id}
      operations:
      - name: retrievepageproperty
        method: GET
        description: Notion Retrieve a page property item
        inputParameters:
        - name: page_id
          in: path
          type: string
          required: true
          description: The ID of the page.
        - name: property_id
          in: path
          type: string
          required: true
          description: The ID of the property to retrieve.
        - name: start_cursor
          in: query
          type: string
          description: Pagination cursor for paginated property types. If supplied, returns results starting after the cursor.
        - name: page_size
          in: query
          type: integer
          description: Maximum number of property items to return (max 100).
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: databases
      path: /databases
      operations:
      - name: createdatabase
        method: POST
        description: Notion Create a database
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: databases-database-id
      path: /databases/{database_id}
      operations:
      - name: retrievedatabase
        method: GET
        description: Notion Retrieve a database
        inputParameters:
        - name: database_id
          in: path
          type: string
          required: true
          description: The ID of the database to retrieve.
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updatedatabase
        method: PATCH
        description: Notion Update a database
        inputParameters:
        - name: database_id
          in: path
          type: string
          required: true
          description: The ID of the database to update.
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: databases-database-id-query
      path: /databases/{database_id}/query
      operations:
      - name: querydatabase
        method: POST
        description: Notion Query a database
        inputParameters:
        - name: database_id
          in: path
          type: string
          required: true
          description: The ID of the database to query.
        - name: filter_properties
          in: query
          type: array
          description: A list of property IDs to include in the response. Only the specified properties will be returned for
            each page.
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: blocks-block-id
      path: /blocks/{block_id}
      operations:
      - name: retrieveblock
        method: GET
        description: Notion Retrieve a block
        inputParameters:
        - name: block_id
          in: path
          type: string
          required: true
          description: The ID of the block to retrieve.
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updateblock
        method: PATCH
        description: Notion Update a block
        inputParameters:
        - name: block_id
          in: path
          type: string
          required: true
          description: The ID of the block to update.
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: deleteblock
        method: DELETE
        description: Notion Delete a block
        inputParameters:
        - name: block_id
          in: path
          type: string
          required: true
          description: The ID of the block to delete (archive).
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: blocks-block-id-children
      path: /blocks/{block_id}/children
      operations:
      - name: retrieveblockchildren
        method: GET
        description: Notion Retrieve block children
        inputParameters:
        - name: block_id
          in: path
          type: string
          required: true
          description: The ID of the block whose children to retrieve. This can be a page ID to retrieve page content.
        - name: start_cursor
          in: query
          type: string
          description: Pagination cursor to continue fetching results.
        - name: page_size
          in: query
          type: integer
          description: Maximum number of blocks to return (max 100).
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: appendblockchildren
        method: PATCH
        description: Notion Append block children
        inputParameters:
        - name: block_id
          in: path
          type: string
          required: true
          description: The ID of the block to append children to. This can be a page ID to add content to a page.
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: users
      path: /users
      operations:
      - name: listusers
        method: GET
        description: Notion List all users
        inputParameters:
        - name: start_cursor
          in: query
          type: string
          description: Pagination cursor to continue fetching results.
        - name: page_size
          in: query
          type: integer
          description: Maximum number of users to return (max 100).
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: users-user-id
      path: /users/{user_id}
      operations:
      - name: retrieveuser
        method: GET
        description: Notion Retrieve a user
        inputParameters:
        - name: user_id
          in: path
          type: string
          required: true
          description: The ID of the user to retrieve.
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: users-me
      path: /users/me
      operations:
      - name: retrievebotuser
        method: GET
        description: Notion Retrieve the bot user
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: search
      path: /search
      operations:
      - name: search
        method: POST
        description: Notion Search by title
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: comments
      path: /comments
      operations:
      - name: listcomments
        method: GET
        description: Notion Retrieve comments
        inputParameters:
        - name: block_id
          in: query
          type: string
          required: true
          description: The ID of the block or page to retrieve comments for.
        - name: start_cursor
          in: query
          type: string
          description: Pagination cursor to continue fetching results.
        - name: page_size
          in: query
          type: integer
          description: Maximum number of comments to return (max 100).
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createcomment
        method: POST
        description: Notion Create a comment
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
  exposes:
  - type: rest
    port: 8080
    namespace: notion-rest
    description: REST adapter for Notion API.
    resources:
    - path: /pages
      name: createpage
      operations:
      - method: POST
        name: createpage
        description: Notion Create a page
        call: notion.createpage
        outputParameters:
        - type: object
          mapping: $.
    - path: /pages/{page_id}
      name: retrievepage
      operations:
      - method: GET
        name: retrievepage
        description: Notion Retrieve a page
        call: notion.retrievepage
        with:
          page_id: rest.page_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /pages/{page_id}
      name: updatepage
      operations:
      - method: PATCH
        name: updatepage
        description: Notion Update page properties
        call: notion.updatepage
        with:
          page_id: rest.page_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /pages/{page_id}/properties/{property_id}
      name: retrievepageproperty
      operations:
      - method: GET
        name: retrievepageproperty
        description: Notion Retrieve a page property item
        call: notion.retrievepageproperty
        with:
          page_id: rest.page_id
          property_id: rest.property_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /databases
      name: createdatabase
      operations:
      - method: POST
        name: createdatabase
        description: Notion Create a database
        call: notion.createdatabase
        outputParameters:
        - type: object
          mapping: $.
    - path: /databases/{database_id}
      name: retrievedatabase
      operations:
      - method: GET
        name: retrievedatabase
        description: Notion Retrieve a database
        call: notion.retrievedatabase
        with:
          database_id: rest.database_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /databases/{database_id}
      name: updatedatabase
      operations:
      - method: PATCH
        name: updatedatabase
        description: Notion Update a database
        call: notion.updatedatabase
        with:
          database_id: rest.database_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /databases/{database_id}/query
      name: querydatabase
      operations:
      - method: POST
        name: querydatabase
        description: Notion Query a database
        call: notion.querydatabase
        with:
          database_id: rest.database_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /blocks/{block_id}
      name: retrieveblock
      operations:
      - method: GET
        name: retrieveblock
        description: Notion Retrieve a block
        call: notion.retrieveblock
        with:
          block_id: rest.block_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /blocks/{block_id}
      name: updateblock
      operations:
      - method: PATCH
        name: updateblock
        description: Notion Update a block
        call: notion.updateblock
        with:
          block_id: rest.block_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /blocks/{block_id}
      name: deleteblock
      operations:
      - method: DELETE
        name: deleteblock
        description: Notion Delete a block
        call: notion.deleteblock
        with:
          block_id: rest.block_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /blocks/{block_id}/children
      name: retrieveblockchildren
      operations:
      - method: GET
        name: retrieveblockchildren
        description: Notion Retrieve block children
        call: notion.retrieveblockchildren
        with:
          block_id: rest.block_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /blocks/{block_id}/children
      name: appendblockchildren
      operations:
      - method: PATCH
        name: appendblockchildren
        description: Notion Append block children
        call: notion.appendblockchildren
        with:
          block_id: rest.block_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /users
      name: listusers
      operations:
      - method: GET
        name: listusers
        description: Notion List all users
        call: notion.listusers
        outputParameters:
        - type: object
          mapping: $.
    - path: /users/{user_id}
      name: retrieveuser
      operations:
      - method: GET
        name: retrieveuser
        description: Notion Retrieve a user
        call: notion.retrieveuser
        with:
          user_id: rest.user_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /users/me
      name: retrievebotuser
      operations:
      - method: GET
        name: retrievebotuser
        description: Notion Retrieve the bot user
        call: notion.retrievebotuser
        outputParameters:
        - type: object
          mapping: $.
    - path: /search
      name: search
      operations:
      - method: POST
        name: search
        description: Notion Search by title
        call: notion.search
        outputParameters:
        - type: object
          mapping: $.
    - path: /comments
      name: listcomments
      operations:
      - method: GET
        name: listcomments
        description: Notion Retrieve comments
        call: notion.listcomments
        outputParameters:
        - type: object
          mapping: $.
    - path: /comments
      name: createcomment
      operations:
      - method: POST
        name: createcomment
        description: Notion Create a comment
        call: notion.createcomment
        outputParameters:
        - type: object
          mapping: $.
  - type: mcp
    port: 9090
    namespace: notion-mcp
    transport: http
    description: MCP adapter for Notion API for AI agent use.
    tools:
    - name: createpage
      description: Notion Create a page
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: notion.createpage
      outputParameters:
      - type: object
        mapping: $.
    - name: retrievepage
      description: Notion Retrieve a page
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: notion.retrievepage
      with:
        page_id: tools.page_id
        filter_properties: tools.filter_properties
      inputParameters:
      - name: page_id
        type: string
        description: The ID of the page to retrieve.
        required: true
      - name: filter_properties
        type: array
        description: A list of page property value IDs to include in the response. If provided, only the specified properties
          will be returned.
      outputParameters:
      - type: object
        mapping: $.
    - name: updatepage
      description: Notion Update page properties
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: notion.updatepage
      with:
        page_id: tools.page_id
      inputParameters:
      - name: page_id
        type: string
        description: The ID of the page to update.
        required: true
      outputParameters:
      - type: object
        mapping: $.
    - name: retrievepageproperty
      description: Notion Retrieve a page property item
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: notion.retrievepageproperty
      with:
        page_id: tools.page_id
        property_id: tools.property_id
        start_cursor: tools.start_cursor
        page_size: tools.page_size
      inputParameters:
      - name: page_id
        type: string
        description: The ID of the page.
        required: true
      - name: property_id
        type: string
        description: The ID of the property to retrieve.
        required: true
      - name: start_cursor
        type: string
        description: Pagination cursor for paginated property types. If supplied, returns results starting after the cursor.
      - name: page_size
        type: integer
        description: Maximum number of property items to return (max 100).
      outputParameters:
      - type: object
        mapping: $.
    - name: createdatabase
      description: Notion Create a database
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: notion.createdatabase
      outputParameters:
      - type: object
        mapping: $.
    - name: retrievedatabase
      description: Notion Retrieve a database
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: notion.retrievedatabase
      with:
        database_id: tools.database_id
      inputParameters:
      - name: database_id
        type: string
        description: The ID of the database to retrieve.
        required: true
      outputParameters:
      - type: object
        mapping: $.
    - name: updatedatabase
      description: Notion Update a database
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: notion.updatedatabase
      with:
        database_id: tools.database_id
      inputParameters:
      - name: database_id
        type: string
        description: The ID of the database to update.
        required: true
      outputParameters:
      - type: object
        mapping: $.
    - name: querydatabase
      description: Notion Query a database
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: notion.querydatabase
      with:
        database_id: tools.database_id
        filter_properties: tools.filter_properties
      inputParameters:
      - name: database_id
        type: string
        description: The ID of the database to query.
        required: true
      - name: filter_properties
        type: array
        description: A list of property IDs to include in the response. Only the specified properties will be returned for
          each page.
      outputParameters:
      - type: object
        mapping: $.
    - name: retrieveblock
      description: Notion Retrieve a block
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: notion.retrieveblock
      with:
        block_id: tools.block_id
      inputParameters:
      - name: block_id
        type: string
        description: The ID of the block to retrieve.
        required: true
      outputParameters:
      - type: object
        mapping: $.
    - name: updateblock
      description: Notion Update a block
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: notion.updateblock
      with:
        block_id: tools.block_id
      inputParameters:
      - name: block_id
        type: string
        description: The ID of the block to update.
        required: true
      outputParameters:
      - type: object
        mapping: $.
    - name: deleteblock
      description: Notion Delete a block
      hints:
        readOnly: false
        destructive: true
        idempotent: true
      call: notion.deleteblock
      with:
        block_id: tools.block_id
      inputParameters:
      - name: block_id
        type: string
        description: The ID of the block to delete (archive).
        required: true
      outputParameters:
      - type: object
        mapping: $.
    - name: retrieveblockchildren
      description: Notion Retrieve block children
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: notion.retrieveblockchildren
      with:
        block_id: tools.block_id
        start_cursor: tools.start_cursor
        page_size: tools.page_size
      inputParameters:
      - name: block_id
        type: string
        description: The ID of the block whose children to retrieve. This can be a page ID to retrieve page content.
        required: true
      - name: start_cursor
        type: string
        description: Pagination cursor to continue fetching results.
      - name: page_size
        type: integer
        description: Maximum number of blocks to return (max 100).
      outputParameters:
      - type: object
        mapping: $.
    - name: appendblockchildren
      description: Notion Append block children
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: notion.appendblockchildren
      with:
        block_id: tools.block_id
      inputParameters:
      - name: block_id
        type: string
        description: The ID of the block to append children to. This can be a page ID to add content to a page.
        required: true
      outputParameters:
      - type: object
        mapping: $.
    - name: listusers
      description: Notion List all users
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: notion.listusers
      with:
        start_cursor: tools.start_cursor
        page_size: tools.page_size
      inputParameters:
      - name: start_cursor
        type: string
        description: Pagination cursor to continue fetching results.
      - name: page_size
        type: integer
        description: Maximum number of users to return (max 100).
      outputParameters:
      - type: object
        mapping: $.
    - name: retrieveuser
      description: Notion Retrieve a user
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: notion.retrieveuser
      with:
        user_id: tools.user_id
      inputParameters:
      - name: user_id
        type: string
        description: The ID of the user to retrieve.
        required: true
      outputParameters:
      - type: object
        mapping: $.
    - name: retrievebotuser
      description: Notion Retrieve the bot user
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: notion.retrievebotuser
      outputParameters:
      - type: object
        mapping: $.
    - name: search
      description: Notion Search by title
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: notion.search
      outputParameters:
      - type: object
        mapping: $.
    - name: listcomments
      description: Notion Retrieve comments
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: notion.listcomments
      with:
        block_id: tools.block_id
        start_cursor: tools.start_cursor
        page_size: tools.page_size
      inputParameters:
      - name: block_id
        type: string
        description: The ID of the block or page to retrieve comments for.
        required: true
      - name: start_cursor
        type: string
        description: Pagination cursor to continue fetching results.
      - name: page_size
        type: integer
        description: Maximum number of comments to return (max 100).
      outputParameters:
      - type: object
        mapping: $.
    - name: createcomment
      description: Notion Create a comment
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: notion.createcomment
      outputParameters:
      - type: object
        mapping: $.
binds:
- namespace: env
  keys:
    NOTION_TOKEN: NOTION_TOKEN