<!-- markdownlint-disable -->

<div align="center">
  <p>
    <a href="https://pypi.org/project/notion-client"><img src="https://img.shields.io/pypi/v/notion-client.svg" alt="PyPI"></a>
    <a href="tox.ini"><img src="https://img.shields.io/pypi/pyversions/notion-client" alt="Supported Python Versions"></a>
    <br/>
    <a href="LICENSE"><img src="https://img.shields.io/github/license/ramnes/notion-sdk-py" alt="License"></a>
    <a href="https://github.com/ambv/black"><img src="https://img.shields.io/badge/code%20style-black-black" alt="Code style"></a>
    <a href="https://codecov.io/github/ramnes/notion-sdk-py"><img src="https://codecov.io/gh/ramnes/notion-sdk-py/branch/main/graphs/badge.svg" alt="Coverage"></a>
    <a href="https://pypistats.org/packages/notion-client"><img src="https://img.shields.io/pypi/dm/notion-client" alt="Package downloads"></a>
    <br/>
    <a href="https://github.com/ramnes/notion-sdk-py/actions/workflows/quality.yml"><img src="https://github.com/ramnes/notion-sdk-py/actions/workflows/quality.yml/badge.svg" alt="Code Quality"></a>
    <a href="https://github.com/ramnes/notion-sdk-py/actions/workflows/test.yml"><img src="https://github.com/ramnes/notion-sdk-py/actions/workflows/test.yml/badge.svg" alt="Tests"></a>
    <a href="https://github.com/ramnes/notion-sdk-py/actions/workflows/docs.yml"><img src="https://github.com/ramnes/notion-sdk-py/actions/workflows/docs.yml/badge.svg" alt="Docs"></a>
  </p>
</div>
<!-- markdownlint-enable -->
**_notion-sdk-py_ is a simple and easy to use client library for the official
[Notion API](https://developers.notion.com/).**
It is meant to be a Python version of the reference [JavaScript SDK](https://github.com/makenotion/notion-sdk-js),
so usage should be very similar between both. 😊 (If not, please open an issue
or PR!)
<!-- markdownlint-disable -->
## Installation
<!-- markdownlint-enable -->
```shell
pip install notion-client
```
## Usage
> Use Notion's [Getting Started Guide](https://developers.notion.com/docs/getting-started)
> to get set up to use Notion's API.
Import and initialize a client using an **integration token** or an
OAuth **access token**.
```python
import os
from notion_client import Client
notion = Client(auth=os.environ["NOTION_TOKEN"])
```
In an asyncio environment, use the asynchronous client instead:
```python
from notion_client import AsyncClient
notion = AsyncClient(auth=os.environ["NOTION_TOKEN"])
```
Make a request to any Notion API endpoint.
```python
from pprint import pprint
list_users_response = notion.users.list()
pprint(list_users_response)
```
> [!NOTE]
> See the complete list of endpoints in the [API reference](https://developers.notion.com/reference).
or with the asynchronous client:
```python
list_users_response = await notion.users.list()
pprint(list_users_response)
```
This would output something like:
```text
{'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.
```python
my_page = notion.data_sources.query(
    **{
        "data_source_id": "897e5a76-ae52-4b48-9fdf-e71f5945d1af",
        "filter": {
            "property": "Landmark",
            "rich_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.
```python
import logging
from notion_client import APIErrorCode, APIResponseError, Client
try:
    notion = Client(auth=os.environ["NOTION_TOKEN"])
    my_page = notion.data_sources.query(
        **{
            "data_source_id": "897e5a76-ae52-4b48-9fdf-e71f5945d1af",
            "filter": {
                "property": "Landmark",
                "rich_text": {
                    "contains": "Bridge",
                },
            },
        }
    )
except APIResponseError as error:
    if error.code == APIErrorCode.ObjectNotFound:
        #
        # For example: handle by asking the user to select a different data source
        #
        ...
    else:
        # Other error handling code
        print(error)
```
### 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 request & response
bodies, set the `log_level` option to `logging.DEBUG`.
```python
import logging
from notion_client import Client
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](https://docs.python.org/3/howto/logging-cookbook.html)
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.
<!-- markdownlint-disable -->
| 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.                                                                                        |
<!-- markdownlint-enable -->
### Full API responses
The following functions can distinguish between full and partial API responses.
<!-- markdownlint-disable -->
| Function                   | Purpose                                                                                                                                                                  |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `is_full_page`             | Determine whether an object is a full [Page object](https://developers.notion.com/reference/page)                                                                        |
| `is_full_block`            | Determine whether an object is a full [Block object](https://developers.notion.com/reference/block)                                                                      |
| `is_full_database`         | Determine whether an object is a full [Database object](https://developers.notion.com/reference/database)                                                                |
| `is_full_page_or_database` | Determine whether an object is a full [Page object](https://developers.notion.com/reference/page) or [Database object](https://developers.notion.com/reference/database) |
| `is_full_user`             | Determine whether an object is a full [User object](https://developers.notion.com/reference/user)                                                                        |
| `is_full_comment`          | Determine whether an object is a full [Comment object](https://developers.notion.com/reference/comment-object)                                                           |
<!-- markdownlint-enable -->
```python
from notion_client.helpers import is_full_page
full_or_partial_pages = notion.data_sources.query(
    data_source_id="897e5a76-ae52-4b48-9fdf-e71f5945d1af"
)
for page in full_or_partial_pages["results"]:
    if not is_full_page_or_database(page):
        continue
    print(f"Created at: {page['created_time']}")
```
### Utility functions
This package also exports a few utility functions that are helpful for dealing
with any of the paginated APIs.
#### `iterate_paginated_api(function, **kwargs)`
This utility turns any paginated API into a generator.
**Parameters:**
- `function`: Any function on the Notion client that represents a paginated API
  (i.e. accepts `start_cursor`.) Example: `notion.blocks.children.list`.
- `**kwargs`: Arguments that should be passed to the API on the first and
  subsequent calls to the API, for example a `block_id`.
**Returns:**
A generator over results from the API.
**Example:**
```python
from notion_client.helpers import iterate_paginated_api
for block in iterate_paginated_api(
    notion.blocks.children.list, block_id=parent_block_id
):
    # Do something with block.
    ...
```
#### `collect_paginated_api(function, **kwargs)`
This utility accepts the same arguments as `iterate_paginated_api`, but collects
the results into an in-memory array.
Before using this utility, check that the data you are dealing with is small
enough to fit in memory.
**Parameters:**
- `function`: Any function on the Notion client that represents a paginated API
  (i.e. accepts `start_cursor`.) Example: `notion.blocks.children.list`.
- `**kwargs`: Arguments that should be passed to the API on the first and
  subsequent calls to the API, for example a `block_id`.
**Returns:**
An array with results from the API.
**Example:**
```python
from notion_client.helpers import collect_paginated_api
blocks = collect_paginated_api(
    notion.blocks.children.list, block_id=parent_block_id
)
# Do something with blocks.
```
Both utilities also have async versions: `async_iterate_paginated_api` and
`async_collect_paginated_api`.
### Custom requests
To make requests directly to a Notion API endpoint instead of using the
pre-built families of methods, call the `request()` method. For example:
```python
import json
# POST /v1/comments
response = notion.request(
    path="comments",
    method="post",
    body={
        "parent": {"page_id": "5c6a28216bb14a7eb6e1c50111515c3d"},
        "rich_text": [{"text": {"content": "Hello, world!"}}],
    },
    # No `query` params in this example, only `body`.
)
print(json.dumps(response, indent=2))
```
> [!TIP]
> Usually, making custom requests with `notion.request()` isn't necessary, but
> can be helpful in some cases, e.g. when upgrading your [Notion API version](https://developers.notion.com/reference/versioning)
> incrementally before upgrading your SDK version. For example, if there's a new
> or renamed endpoint in the new API version that isn't yet available to call
> via a dedicated method on `Client`.
>
> In the above example, the simpler approach is to use
> `notion.comments.create()`.
Another customization you can make is to pass your own `httpx.Client` or
`httpx.AsyncClient` to the `Client` or `AsyncClient` constructor. This might be
helpful for some execution environments where the default HTTPX client isn't
suitable.
## Testing
Run the tests with the `pytest` command. If you want to test against all Python
versions, you can run `tox` instead.
The tests are using `pytest-vcr`'s cassettes for simulating requests to the
Notion API. To create new tests or run them without cassettes, you need to set
up the environment variables `NOTION_TOKEN` and `NOTION_TEST_PAGE_ID` (a page
where your integration has all the capabilities enabled).
The code will use the page at `NOTION_TEST_PAGE_ID` to generate a temporary
environment with the Notion objects to be tested, which will be deleted
at the end of the session.
## Requirements and compatibility
This package supports the following minimum versions:
- Runtime: Python >= 3.8
- httpx >= 0.23.0
Earlier versions may still work, but we encourage people building new applications
to upgrade to the current stable.
## Getting help
If you want to submit a feature request for Notion's API, or are experiencing
any issues with the API platform, please email `developers@makenotion.com`.
If you found a bug with the library, please [submit an issue](https://github.com/ramnes/notion-sdk-py/issues).
            
         
        Raw data
        
            {
    "_id": null,
    "home_page": "https://github.com/ramnes/notion-sdk-py",
    "name": "notion-client",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4,>=3.8",
    "maintainer_email": null,
    "keywords": null,
    "author": "Guillaume Gelin",
    "author_email": "contact@ramnes.eu",
    "download_url": "https://files.pythonhosted.org/packages/af/b0/9de5066cf83d73fef0ffd5ecbc0b25159f94f8d88cc012393657d180b37a/notion_client-2.6.0.tar.gz",
    "platform": null,
    "description": "<!-- markdownlint-disable -->\n\n\n<div align=\"center\">\n  <p>\n    <a href=\"https://pypi.org/project/notion-client\"><img src=\"https://img.shields.io/pypi/v/notion-client.svg\" alt=\"PyPI\"></a>\n    <a href=\"tox.ini\"><img src=\"https://img.shields.io/pypi/pyversions/notion-client\" alt=\"Supported Python Versions\"></a>\n    <br/>\n    <a href=\"LICENSE\"><img src=\"https://img.shields.io/github/license/ramnes/notion-sdk-py\" alt=\"License\"></a>\n    <a href=\"https://github.com/ambv/black\"><img src=\"https://img.shields.io/badge/code%20style-black-black\" alt=\"Code style\"></a>\n    <a href=\"https://codecov.io/github/ramnes/notion-sdk-py\"><img src=\"https://codecov.io/gh/ramnes/notion-sdk-py/branch/main/graphs/badge.svg\" alt=\"Coverage\"></a>\n    <a href=\"https://pypistats.org/packages/notion-client\"><img src=\"https://img.shields.io/pypi/dm/notion-client\" alt=\"Package downloads\"></a>\n    <br/>\n    <a href=\"https://github.com/ramnes/notion-sdk-py/actions/workflows/quality.yml\"><img src=\"https://github.com/ramnes/notion-sdk-py/actions/workflows/quality.yml/badge.svg\" alt=\"Code Quality\"></a>\n    <a href=\"https://github.com/ramnes/notion-sdk-py/actions/workflows/test.yml\"><img src=\"https://github.com/ramnes/notion-sdk-py/actions/workflows/test.yml/badge.svg\" alt=\"Tests\"></a>\n    <a href=\"https://github.com/ramnes/notion-sdk-py/actions/workflows/docs.yml\"><img src=\"https://github.com/ramnes/notion-sdk-py/actions/workflows/docs.yml/badge.svg\" alt=\"Docs\"></a>\n  </p>\n</div>\n<!-- markdownlint-enable -->\n\n**_notion-sdk-py_ is a simple and easy to use client library for the official\n[Notion API](https://developers.notion.com/).**\n\nIt is meant to be a Python version of the reference [JavaScript SDK](https://github.com/makenotion/notion-sdk-js),\nso usage should be very similar between both. \ud83d\ude0a (If not, please open an issue\nor PR!)\n\n<!-- markdownlint-disable -->\n## Installation\n<!-- markdownlint-enable -->\n```shell\npip install notion-client\n```\n\n## Usage\n\n> Use Notion's [Getting Started Guide](https://developers.notion.com/docs/getting-started)\n> to get set up to use Notion's API.\n\nImport and initialize a client using an **integration token** or an\nOAuth **access token**.\n\n```python\nimport os\nfrom notion_client import Client\n\nnotion = Client(auth=os.environ[\"NOTION_TOKEN\"])\n```\n\nIn an asyncio environment, use the asynchronous client instead:\n\n```python\nfrom notion_client import AsyncClient\n\nnotion = AsyncClient(auth=os.environ[\"NOTION_TOKEN\"])\n```\n\nMake a request to any Notion API endpoint.\n\n```python\nfrom pprint import pprint\n\nlist_users_response = notion.users.list()\npprint(list_users_response)\n```\n\n> [!NOTE]\n> See the complete list of endpoints in the [API reference](https://developers.notion.com/reference).\n\nor with the asynchronous client:\n\n```python\nlist_users_response = await notion.users.list()\npprint(list_users_response)\n```\n\nThis would output something like:\n\n```text\n{'results': [{'avatar_url': 'https://secure.notion-static.com/e6a352a8-8381-44d0-a1dc-9ed80e62b53d.jpg',\n              'id': 'd40e767c-d7af-4b18-a86d-55c61f1e39a4',\n              'name': 'Avocado Lovelace',\n              'object': 'user',\n              'person': {'email': 'avo@example.org'},\n              'type': 'person'},\n             ...]}\n```\n\nAll API endpoints are available in both the synchronous and asynchronous clients.\n\nEndpoint parameters are grouped into a single object. You don't need to remember\nwhich parameters go in the path, query, or body.\n\n```python\nmy_page = notion.data_sources.query(\n    **{\n        \"data_source_id\": \"897e5a76-ae52-4b48-9fdf-e71f5945d1af\",\n        \"filter\": {\n            \"property\": \"Landmark\",\n            \"rich_text\": {\n                \"contains\": \"Bridge\",\n            },\n        },\n    }\n)\n```\n\n### Handling errors\n\nIf the API returns an unsuccessful response, an `APIResponseError` will be raised.\n\nThe error contains properties from the response, and the most helpful is `code`.\nYou can compare `code` to the values in the `APIErrorCode` object to avoid\nmisspelling error codes.\n\n```python\nimport logging\nfrom notion_client import APIErrorCode, APIResponseError, Client\n\ntry:\n    notion = Client(auth=os.environ[\"NOTION_TOKEN\"])\n    my_page = notion.data_sources.query(\n        **{\n            \"data_source_id\": \"897e5a76-ae52-4b48-9fdf-e71f5945d1af\",\n            \"filter\": {\n                \"property\": \"Landmark\",\n                \"rich_text\": {\n                    \"contains\": \"Bridge\",\n                },\n            },\n        }\n    )\nexcept APIResponseError as error:\n    if error.code == APIErrorCode.ObjectNotFound:\n        #\n        # For example: handle by asking the user to select a different data source\n        #\n        ...\n    else:\n        # Other error handling code\n        print(error)\n```\n\n### Logging\n\nThe client emits useful information to a logger. By default, it only emits warnings\nand errors.\n\nIf you're debugging an application, and would like the client to log request & response\nbodies, set the `log_level` option to `logging.DEBUG`.\n\n```python\nimport logging\nfrom notion_client import Client\n\nnotion = Client(\n    auth=os.environ[\"NOTION_TOKEN\"],\n    log_level=logging.DEBUG,\n)\n```\n\nYou may also set a custom `logger` to emit logs to a destination other than `stdout`.\nHave a look at [Python's logging cookbook](https://docs.python.org/3/howto/logging-cookbook.html)\nif you want to create your own logger.\n\n### Client options\n\n`Client` and `AsyncClient` both support the following options on initialization.\nThese options are all keys in the single constructor parameter.\n\n<!-- markdownlint-disable -->\n| Option       | Default value              | Type              | Description                                                                                             |\n| ------------ | -------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------- |\n| `auth`       | `None`                     | `string`          | Bearer token for authentication. If left undefined, the `auth` parameter should be set on each request. |\n| `log_level`  | `logging.WARNING`          | `int`             | Verbosity of logs the instance will produce. By default, logs are written to `stdout`.                  |\n| `timeout_ms` | `60_000`                   | `int`             | Number of milliseconds to wait before emitting a `RequestTimeoutError`                                  |\n| `base_url`   | `\"https://api.notion.com\"` | `string`          | The root URL for sending API requests. This can be changed to test with a mock server.                  |\n| `logger`     | Log to console             | `logging.Logger`  | A custom logger.                                                                                        |\n<!-- markdownlint-enable -->\n\n### Full API responses\n\nThe following functions can distinguish between full and partial API responses.\n\n<!-- markdownlint-disable -->\n| Function                   | Purpose                                                                                                                                                                  |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| `is_full_page`             | Determine whether an object is a full [Page object](https://developers.notion.com/reference/page)                                                                        |\n| `is_full_block`            | Determine whether an object is a full [Block object](https://developers.notion.com/reference/block)                                                                      |\n| `is_full_database`         | Determine whether an object is a full [Database object](https://developers.notion.com/reference/database)                                                                |\n| `is_full_page_or_database` | Determine whether an object is a full [Page object](https://developers.notion.com/reference/page) or [Database object](https://developers.notion.com/reference/database) |\n| `is_full_user`             | Determine whether an object is a full [User object](https://developers.notion.com/reference/user)                                                                        |\n| `is_full_comment`          | Determine whether an object is a full [Comment object](https://developers.notion.com/reference/comment-object)                                                           |\n<!-- markdownlint-enable -->\n\n```python\nfrom notion_client.helpers import is_full_page\n\nfull_or_partial_pages = notion.data_sources.query(\n    data_source_id=\"897e5a76-ae52-4b48-9fdf-e71f5945d1af\"\n)\n\nfor page in full_or_partial_pages[\"results\"]:\n    if not is_full_page_or_database(page):\n        continue\n    print(f\"Created at: {page['created_time']}\")\n```\n\n### Utility functions\n\nThis package also exports a few utility functions that are helpful for dealing\nwith any of the paginated APIs.\n\n#### `iterate_paginated_api(function, **kwargs)`\n\nThis utility turns any paginated API into a generator.\n\n**Parameters:**\n\n- `function`: Any function on the Notion client that represents a paginated API\n  (i.e. accepts `start_cursor`.) Example: `notion.blocks.children.list`.\n- `**kwargs`: Arguments that should be passed to the API on the first and\n  subsequent calls to the API, for example a `block_id`.\n\n**Returns:**\n\nA generator over results from the API.\n\n**Example:**\n\n```python\nfrom notion_client.helpers import iterate_paginated_api\n\nfor block in iterate_paginated_api(\n    notion.blocks.children.list, block_id=parent_block_id\n):\n    # Do something with block.\n    ...\n```\n\n#### `collect_paginated_api(function, **kwargs)`\n\nThis utility accepts the same arguments as `iterate_paginated_api`, but collects\nthe results into an in-memory array.\n\nBefore using this utility, check that the data you are dealing with is small\nenough to fit in memory.\n\n**Parameters:**\n\n- `function`: Any function on the Notion client that represents a paginated API\n  (i.e. accepts `start_cursor`.) Example: `notion.blocks.children.list`.\n- `**kwargs`: Arguments that should be passed to the API on the first and\n  subsequent calls to the API, for example a `block_id`.\n\n**Returns:**\n\nAn array with results from the API.\n\n**Example:**\n\n```python\nfrom notion_client.helpers import collect_paginated_api\n\nblocks = collect_paginated_api(\n    notion.blocks.children.list, block_id=parent_block_id\n)\n# Do something with blocks.\n```\n\nBoth utilities also have async versions: `async_iterate_paginated_api` and\n`async_collect_paginated_api`.\n\n### Custom requests\n\nTo make requests directly to a Notion API endpoint instead of using the\npre-built families of methods, call the `request()` method. For example:\n\n```python\nimport json\n\n# POST /v1/comments\nresponse = notion.request(\n    path=\"comments\",\n    method=\"post\",\n    body={\n        \"parent\": {\"page_id\": \"5c6a28216bb14a7eb6e1c50111515c3d\"},\n        \"rich_text\": [{\"text\": {\"content\": \"Hello, world!\"}}],\n    },\n    # No `query` params in this example, only `body`.\n)\n\nprint(json.dumps(response, indent=2))\n```\n\n> [!TIP]\n> Usually, making custom requests with `notion.request()` isn't necessary, but\n> can be helpful in some cases, e.g. when upgrading your [Notion API version](https://developers.notion.com/reference/versioning)\n> incrementally before upgrading your SDK version. For example, if there's a new\n> or renamed endpoint in the new API version that isn't yet available to call\n> via a dedicated method on `Client`.\n>\n> In the above example, the simpler approach is to use\n> `notion.comments.create()`.\n\nAnother customization you can make is to pass your own `httpx.Client` or\n`httpx.AsyncClient` to the `Client` or `AsyncClient` constructor. This might be\nhelpful for some execution environments where the default HTTPX client isn't\nsuitable.\n\n## Testing\n\nRun the tests with the `pytest` command. If you want to test against all Python\nversions, you can run `tox` instead.\n\nThe tests are using `pytest-vcr`'s cassettes for simulating requests to the\nNotion API. To create new tests or run them without cassettes, you need to set\nup the environment variables `NOTION_TOKEN` and `NOTION_TEST_PAGE_ID` (a page\nwhere your integration has all the capabilities enabled).\n\nThe code will use the page at `NOTION_TEST_PAGE_ID` to generate a temporary\nenvironment with the Notion objects to be tested, which will be deleted\nat the end of the session.\n\n## Requirements and compatibility\n\nThis package supports the following minimum versions:\n\n- Runtime: Python >= 3.8\n- httpx >= 0.23.0\n\nEarlier versions may still work, but we encourage people building new applications\nto upgrade to the current stable.\n\n## Getting help\n\nIf you want to submit a feature request for Notion's API, or are experiencing\nany issues with the API platform, please email `developers@makenotion.com`.\n\nIf you found a bug with the library, please [submit an issue](https://github.com/ramnes/notion-sdk-py/issues).\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Python client for the official Notion API",
    "version": "2.6.0",
    "project_urls": {
        "Homepage": "https://github.com/ramnes/notion-sdk-py"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8dde12a55f5ce4b1af277f1394938ffc85cdbe368ef7b7bcffce373ef541795d",
                "md5": "37e08c84f3bd74e4980e5b5689473750",
                "sha256": "e19a406252015ac1d1c8822da9322ed01a033a3d6602935d483a0cc23db09880"
            },
            "downloads": -1,
            "filename": "notion_client-2.6.0-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "37e08c84f3bd74e4980e5b5689473750",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": "<4,>=3.8",
            "size": 16866,
            "upload_time": "2025-10-23T14:45:15",
            "upload_time_iso_8601": "2025-10-23T14:45:15.528254Z",
            "url": "https://files.pythonhosted.org/packages/8d/de/12a55f5ce4b1af277f1394938ffc85cdbe368ef7b7bcffce373ef541795d/notion_client-2.6.0-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "afb09de5066cf83d73fef0ffd5ecbc0b25159f94f8d88cc012393657d180b37a",
                "md5": "c0eebf547500760068444cbf6ed9fef1",
                "sha256": "1e3ff65452ed29a2a044ec2236b38a430e09d8e18911c93ae16c6a2ae0744f60"
            },
            "downloads": -1,
            "filename": "notion_client-2.6.0.tar.gz",
            "has_sig": false,
            "md5_digest": "c0eebf547500760068444cbf6ed9fef1",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4,>=3.8",
            "size": 26607,
            "upload_time": "2025-10-23T14:45:17",
            "upload_time_iso_8601": "2025-10-23T14:45:17.105147Z",
            "url": "https://files.pythonhosted.org/packages/af/b0/9de5066cf83d73fef0ffd5ecbc0b25159f94f8d88cc012393657d180b37a/notion_client-2.6.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-23 14:45:17",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ramnes",
    "github_project": "notion-sdk-py",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": true,
    "tox": true,
    "lcname": "notion-client"
}