Skip to content

NotionGPT - Create a custom GPT action that calls the official & latest Notion API. Unlock the power of custom GPTs and access your Notion workspace in ChatGPT with natural language. Push and Pull Content from Your Notion with ChatGPT πŸ”₯.

License

Notifications You must be signed in to change notification settings

cameronking4/notion-openapi-chatgpt-action

Repository files navigation

NotionGPT: Push and Pull Content from Your Notion Workspace with ChatGPT πŸ”₯

Ever wished you could create Notion pages from ChatGPT? Have you wondered if there's an easy way your ChatGPT could be in sync with knowledge files in your Notion Workspace? πŸ‘€ Well, look no more!

Demo

Screen.Recording.2024-10-19.at.9.47.07.PM.mov

Quickstart

Setup for ChatGPT

  1. Create a custom GPT and click Create new action
  2. Go to https://notion-chatgpt.vercel.app and click the copy button to get the Import URL.
  3. Click "Authentication" and select API-Key using the Bearer authentication method
  4. Head over to Notion Integrations and copy over your API-Key
  5. Ensure this key has access to the workspace pages & databases you'd like to reference / update

Raw Notion OpenAPI spec

Alternatively, you could copy this raw YAML (~500 lines)

openapi: 3.1.0
info:
  title: Notion API
  description: API for interacting with Notion resources such as pages and databases.
  version: 1.0.0
servers:
  - url: https://api.notion.com/v1
    description: Main API server
paths:
  /pages/{page_id}:
    get:
      operationId: getPage
      summary: Retrieve a page by its ID.
      parameters:
        - name: page_id
          in: path
          required: true
          description: The ID of the page to retrieve.
          schema:
            type: string
            format: uuid
        - name: Notion-Version
          in: header
          required: true
          description: Notion API version
          schema:
            type: string
            default: "2022-06-28"
      responses:
        "200":
          description: A JSON object representing the page.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Page"
    patch:
      operationId: updatePage
      summary: Update a page by its ID.
      parameters:
        - name: page_id
          in: path
          required: true
          description: The ID of the page to update.
          schema:
            type: string
            format: uuid
        - name: Notion-Version
          in: header
          required: true
          description: Notion API version
          schema:
            type: string
            default: "2022-06-28"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PageUpdate"
      responses:
        "200":
          description: The updated page.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Page"
  /pages:
    post:
      operationId: createPage
      summary: Create a new page.
      description: Creates a new page that is a child of an existing page or database.
      parameters:
        - name: Notion-Version
          in: header
          required: true
          description: Notion API version
          schema:
            type: string
            default: "2022-06-28"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PageCreate"
      responses:
        "200":
          description: A JSON object representing the newly created page.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Page"
  /databases/{database_id}:
    get:
      operationId: getDatabase
      summary: Retrieve a database by its ID.
      parameters:
        - name: database_id
          in: path
          required: true
          description: The ID of the database to retrieve.
          schema:
            type: string
            format: uuid
        - name: Notion-Version
          in: header
          required: true
          description: Notion API version
          schema:
            type: string
            default: "2022-06-28"
      responses:
        "200":
          description: A JSON object representing the database.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Database"
  /databases/{database_id}/query:
    post:
      operationId: queryDatabase
      summary: Query a database.
      parameters:
        - name: database_id
          in: path
          required: true
          description: The ID of the database to query.
          schema:
            type: string
            format: uuid
        - name: Notion-Version
          in: header
          required: true
          description: Notion API version
          schema:
            type: string
            default: "2022-06-28"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DatabaseQuery"
      responses:
        "200":
          description: The query results.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DatabaseRecord"
  /search:
    post:
      operationId: search
      summary: Search all pages and databases.
      parameters:
        - name: Notion-Version
          in: header
          required: true
          description: Notion API version
          schema:
            type: string
            default: "2022-06-28"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SearchRequest"
      responses:
        "200":
          description: The search results.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SearchResponse"
  /users:
    get:
      operationId: listUsers
      summary: List all users in the workspace.
      parameters:
        - name: Notion-Version
          in: header
          required: true
          description: Notion API version
          schema:
            type: string
            default: "2022-06-28"
      responses:
        "200":
          description: A list of users.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/User"
  /blocks/{block_id}/children:
    get:
      operationId: getPageOrBlockChildrenContent
      summary: Retrieve the children of a block. Pages are also considered blocks.
      parameters:
        - name: block_id
          in: path
          required: true
          description: The ID of the block or page to retrieve children from.
          schema:
            type: string
            format: uuid
        - name: Notion-Version
          in: header
          required: true
          description: Notion API version
          schema:
            type: string
            default: "2022-06-28"
        - name: start_cursor
          in: query
          required: false
          description: The cursor to start from for pagination.
          schema:
            type: string
        - name: page_size
          in: query
          required: false
          description: The number of results to return per page.
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 100
      responses:
        "200":
          description: A paginated list of child block objects.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BlockChildren"
    patch:
      operationId: appendBlockChildren
      summary: Append new content to a block.
      parameters:
        - name: block_id
          in: path
          required: true
          description: The ID of the block to append content to.
          schema:
            type: string
            format: uuid
        - name: Notion-Version
          in: header
          required: true
          description: Notion API version
          schema:
            type: string
            default: "2022-06-28"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                children:
                  type: array
                  items:
                    $ref: "#/components/schemas/Block"
                after:
                  type: string
                  description: The ID of the existing block that the new block should be appended after.
      responses:
        "200":
          description: A paginated list of newly created first level children block objects.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BlockChildren"
components:
  headers:
    NotionVersion:
      required: true
      schema:
        type: string
        default: "2022-06-28"
      description: Notion API version
  schemas:
    Page:
      type: object
      required:
        - object
        - id
        - properties
      properties:
        object:
          type: string
          enum: [page]
        id:
          type: string
          format: uuid
        properties:
          type: object
          additionalProperties: true
    PageUpdate:
      type: object
      properties:
        properties:
          type: object
          additionalProperties: true
    PageCreate:
      type: object
      required:
        - parent
        - properties
      properties:
        parent:
          type: object
          required:
            - database_id
          properties:
            database_id:
              type: string
              format: uuid
        properties:
          type: object
          properties:
            title:
              type: array
              items:
                type: object
                properties:
                  text:
                    type: object
                    properties:
                      content:
                        type: string
          additionalProperties: true
        children:
          type: array
          items:
            type: object
            additionalProperties: true
        icon:
          type: object
          properties:
            emoji:
              type: string
        cover:
          type: object
          properties:
            external:
              type: object
              properties:
                url:
                  type: string
                  format: uri
    Database:
      type: object
      required:
        - object
        - id
      properties:
        object:
          type: string
          enum: [database]
        id:
          type: string
          format: uuid
        properties:
          type: object
          additionalProperties: true
    User:
      type: object
      required:
        - object
        - id
      properties:
        object:
          type: string
          enum: [user]
        id:
          type: string
          format: uuid
        name:
          type: string
        avatar_url:
          type: string
          format: uri
    BlockChildren:
      type: array
      items:
        $ref: "#/components/schemas/Block"
    Block:
      type: object
      required:
        - object
        - id
      properties:
        object:
          type: string
          enum: [block]
        id:
          type: string
          format: uuid
        type:
          type: string
        block_data:
          type: object
          additionalProperties: true
    Comment:
      type: object
      required:
        - object
        - id
      properties:
        object:
          type: string
          enum: [comment]
        id:
          type: string
          format: uuid
        parent:
          type: object
          additionalProperties: true
        content:
          type: string
    PagePropertyItem:
      type: object
      required:
        - object
        - id
      properties:
        object:
          type: string
          enum: [property_item]
        id:
          type: string
          format: uuid
        property_data:
          type: object
          additionalProperties: true
    DatabaseQuery:
      type: object
      properties:
        filter:
          type: object
          additionalProperties: true
        sorts:
          type: array
          items:
            type: object
            additionalProperties: true
    DatabaseRecord:
      type: object
      required:
        - object
        - id
      properties:
        object:
          type: string
          enum: [database_record]
        id:
          type: string
          format: uuid
        record_data:
          type: object
          additionalProperties: true
    SearchRequest:
      type: object
      properties:
        query:
          type: string
        sort:
          type: object
          additionalProperties: true
    SearchResponse:
      type: array
      items:
        $ref: "#/components/schemas/SearchResult"
    SearchResult:
      type: object
      required:
        - object
        - id
      properties:
        object:
          type: string
          enum: [search_result]
        id:
          type: string
          format: uuid
        result_data:
          type: object
          additionalProperties: true
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
security:
  - BearerAuth: []

About

NotionGPT - Create a custom GPT action that calls the official & latest Notion API. Unlock the power of custom GPTs and access your Notion workspace in ChatGPT with natural language. Push and Pull Content from Your Notion with ChatGPT πŸ”₯.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published