Unofficial Python 3 client for Notion.so API v3.
enable_caching=True
when initializing NotionClient
)my_block.refresh()
to update, in the meantime, while monitoring is being fixed)Read more about Notion and Notion-py on Jamie's blog
Note: the latest version of notion-py requires Python 3.5 or greater.
pip install notion
from notion.client import NotionClient
# Obtain the `token_v2` value by inspecting your browser cookies on a logged-in session on Notion.so
client = NotionClient(token_v2="<token_v2>")
# Replace this URL with the URL of the page you want to edit
page = client.get_block("<https://www.notion.so/myorg/Test-c0d20a71c0944985ae96e661ccc99821>")
print("The old title is:", page.title)
# Note: You can use Markdown! We convert on-the-fly to Notion's internal formatted text data structure.
page.title = "The title has now changed, and has *live-updated* in the browser!"
Record
), with each instance of a class representing a particular record. Some fields from the records (like title
in the example above) have been mapped to model properties, allowing for easy, instantaneous read/write of the record. Other fields can be read with the get
method, and written with the set
method, but then you'll need to make sure to match the internal structures exactly.Block
class and its subclasses, corresponding to different type
of blocks), space (via Space
class), collection (via Collection
class), collection_view (via CollectionView
and subclasses), and notion_user (via User
class).RecordStore
, with the Record
instances not storing state internally, but always referring to the data in the central RecordStore
. Many API operations return updating versions of a large number of associated records, which we use to update the store, so the data in Record
instances may sometimes update without being explicitly requested. You can also call the refresh
method on a Record
to trigger an update, or pass force_update
to methods like get
.myrecord.get()
with no arguments.client.get_block
, you can pass in either an ID, or the URL of a page. Note that pages themselves are just blocks
, as are all the chunks of content on the page. You can get the URL for a block within a page by clicking "Copy Link" in the context menu for the block, and pass that URL into get_block
as well.