A CLI tool and JavaScript library to help you interact with the Notion API.
This is really just a proof of concept how you can reverse-engineer the Notion API to read and write data to Notion programmatically.
After you clone this repo and run npm install, here are some of the things you can do.
❯❯❯ ./bin/notion-api notion-api <command> login Log in to Notion user Get information about the logged in user spaces Get the user's spaces along with related information sidebar <spaceId> Get a list of pages in the sidebar for a given space get <table> <id> Get a record from Notion set-title <blockId> <title> Set a block title You can login, which will save your authentication cookies to the cookies.json file.
❯❯❯ ./bin/notion-api login ? Email: [email protected] ✔ Sending temporary password ? Password: tern-dee-lund-tub ✔ Logging in You can see information about the logged in user.
❯❯❯ ./bin/notion-api user{id: '9a51f675-e2e2-46e5-8bcd-6bc535c7e7c0', email: '[email protected]', given_name: 'Steve', family_name: 'Jobs', ... } You can see a list of the spaces that the user is in.
❯❯❯ ./bin/notion-api spaces [{spaceView:{id: 'a304ffab-9230-4289-9108-5d6cfc6d9ab7', space_id: '6d702b09-8795-4385-abb3-dc6b3e8907d3', ... }, spaceData:{name: "Steve's Workspace", ... } }, ... ] If you grab that spaceId, you can see the sidebar inside that space.
❯❯❯ ./bin/notion-api sidebar 6d702b09-8795-4385-abb3-dc6b3e8907d3{favorites: [{id: '4ae34ac9-6bf7-47f5-a9e2-5290ea59eb82', type: 'page', properties:{title: [ [ 'Notes' ] ],}, ... } ], workspace: [ ... ], shared: [ ... ], private: [ ... ] } And you can edit the title of any block.
❯❯❯ ./bin/notion-api set-title 4ae34ac9-6bf7-47f5-a9e2-5290ea59eb82 'My Notes' It's probably better to wait for an official API before doing some things:
- Rendering a Notion page requires building a bunch of renderers.
- Reactively listening to changes on the websocket looks like a pain.