Skip to main content

Python client for the official Notion API

Project description

Notion SDK for Python

A simple and easy to use client for the Notion API

PyPI Supported Python Versions License Code style
Code Quality Tests Docs


This client is meant to be a Python version of the reference JavaScript SDK, so usage should be pretty similar between both. 😊

📢 Announcement (14-08-2021) — 0.6.0 is now released and adds support for the recent Notion API changes. Upgrading should be seamless from 0.4.0 onwards.

Installation

pip install notion-client

Usage

Before getting started, create an integration and find the token. → Learn more about authorization.

Import and initialize a client using an integration token or an OAuth access token.

import os
from notion_client import Client

notion = Client(auth=os.environ["NOTION_TOKEN"])

In an asyncio environment, use the asynchronous client instead:

from notion_client import AsyncClient

notion = AsyncClient(auth=os.environ["NOTION_TOKEN"])

Make a request to any Notion API endpoint.

See the complete list of endpoints in the API reference.

from pprint import pprint

list_users_response = notion.users.list()
pprint(list_users_response)

or with the asynchronous client:

list_users_response = await notion.users.list()
pprint(list_users_response)

This would output something like:

{'results': [{'avatar_url': 'https://secure.notion-static.com/e6a352a8-8381-44d0-a1dc-9ed80e62b53d.jpg',
              'id': 'd40e767c-d7af-4b18-a86d-55c61f1e39a4',
              'name': 'Avocado Lovelace',
              'object': 'user',
              'person': {'email': 'avo@example.org'},
              'type': 'person'},
             ...]}

All API endpoints are available in both the synchronous and asynchronous clients.

Endpoint parameters are grouped into a single object. You don't need to remember which parameters go in the path, query, or body.

my_page = notion.databases.query(
    **{
        "database_id": "897e5a76-ae52-4b48-9fdf-e71f5945d1af",
        "filter": {
            "property": "Landmark",
            "text": {
                "contains": "Bridge",
            },
        },
    }
)

Handling errors

If the API returns an unsuccessful response, an APIResponseError will be raised.

The error contains properties from the response, and the most helpful is code. You can compare code to the values in the APIErrorCode object to avoid misspelling error codes.

import logging
from notion_client import APIErrorCode, APIResponseError

try:
    my_page = notion.databases.query(
        **{
            "database_id": "897e5a76-ae52-4b48-9fdf-e71f5945d1af",
            "filter": {
                "property": "Landmark",
                "text": {
                    "contains": "Bridge",
                },
            },
        }
    )
except APIResponseError as error:
    if error.code == APIErrorCode.ObjectNotFound:
        ...  # For example: handle by asking the user to select a different database
    else:
        # Other error handling code
        logging.exception()

Logging

The client emits useful information to a logger. By default, it only emits warnings and errors.

If you're debugging an application, and would like the client to log response bodies, set the log_level option to logging.DEBUG.

notion = Client(
    auth=os.environ["NOTION_TOKEN"],
    log_level=logging.DEBUG,
)

You may also set a custom logger to emit logs to a destination other than stdout. Have a look at Python's logging cookbook if you want to create your own logger.

Client options

Client and AsyncClient both support the following options on initialization. These options are all keys in the single constructor parameter.

Option Default value Type Description
auth None string Bearer token for authentication. If left undefined, the auth parameter should be set on each request.
log_level logging.WARNING int Verbosity of logs the instance will produce. By default, logs are written to stdout.
timeout_ms 60_000 int Number of milliseconds to wait before emitting a RequestTimeoutError
base_url "https://api.notion.com" string The root URL for sending API requests. This can be changed to test with a mock server.
logger Log to console logging.Logger A custom logger.

Requirements

This package supports the following minimum versions:

  • Python >= 3.7
  • httpx >= 0.15.0

Earlier versions may still work, but we encourage people building new applications to upgrade to the current stable.

Getting help

If you have a question about the library, or are having difficulty using it, chat with the community in GitHub Discussions.

If you're experiencing issues with the Notion API, such as a service interruption or a potential bug in the platform, reach out to Notion help.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

notionhq-client-0.6.0.tar.gz (14.2 kB view details)

Uploaded Source

Built Distribution

notionhq_client-0.6.0-py2.py3-none-any.whl (13.6 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file notionhq-client-0.6.0.tar.gz.

File metadata

  • Download URL: notionhq-client-0.6.0.tar.gz
  • Upload date:
  • Size: 14.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.7.3 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.8.9

File hashes

Hashes for notionhq-client-0.6.0.tar.gz
Algorithm Hash digest
SHA256 3e345273a1750318ef7eeefd43563b15539b7f4f551c789947e223ff29cd6bd2
MD5 7bea995308fc367747f721796390d23b
BLAKE2b-256 bebaa6077b001c769c5e122652fe90fd89fc032c881935d86c168c168cf289a1

See more details on using hashes here.

File details

Details for the file notionhq_client-0.6.0-py2.py3-none-any.whl.

File metadata

  • Download URL: notionhq_client-0.6.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 13.6 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.7.3 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.8.9

File hashes

Hashes for notionhq_client-0.6.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 4e6887d07ac7cd3817e9c0d51258233ecdd5a819fbe3a050e88c43b2ffbcea2b
MD5 a4c67a34629724a81f008894082b7d88
BLAKE2b-256 156f29112488097c137b3554f5174c16e4ca5b6de56f2172c681d0bbb8e4aee6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page