notion pack authenticates as an integration, which
is Notion’s name for an app. For your own workspace an internal one is enough —
a secret to copy, no consent screen — but a new integration can see no
pages at all until you connect it to some. That last step is the one that
turns a working token into empty results, so it gets a step of its own.
The links open in a new tab; this page stays where you left it.
1
Create the integration
Open notion.so/profile/integrations
→ New integration. Give it a name, pick the workspace, leave the type as
Internal, and Save.
2
Give it the capabilities the tools use
On the integration’s Configuration tab, under Capabilities, tick:
- Read content, Update content and Insert content
- Read comments and Insert comments
- Read user information — with or without email addresses
3
Copy the secret
Still on Configuration: Internal Integration Secret → Show → Copy. It
begins The pack reads it on its next call. An internal secret does not expire.
ntn_.4
Connect it to your pages
Open a page the integration should reach, then ••• in its top-right corner →
Connections → search for the integration → Confirm. Every page under
that one comes with it, so connecting a top-level page covers its whole tree.The integration’s own Access tab does the same from the other side: Edit
access and pick the pages there.Without this, every call succeeds and finds nothing —
search returns an empty
list, and a page you know exists answers object_not_found.5
Verify
verify_notion.py
Your users’ workspaces
A product whose users each connect their own workspace needs a public integration instead: at the same page, set the type to Public, fill in the redirect URIs, and each user picks the pages to share on Notion’s own consent screen. The route is getting the grant; the pack page shows the credential providers.Related
- Notion — the pack, and how a database differs from the table inside it
- Every pack — what the other packs need, in one table