Notion
notion.com ↗Create a public connection and OAuth works for any workspace. Marketplace listing needs a security review. The real surprise: your agent only sees pages users pick at consent.
01Pick your path
02Time & effort
- DEVCreate public connection in the Developer portal10–20 minutessourced[notion-auth]
- DEVImplement OAuth + page-picker aware UX2–4 hoursinferred
- PRODMarketplace security review (optional)wait 1–4 weeksinferredNotion doesn't publish a timeline. This range is our estimate.
03Steps
Get a working connection
'Any workspace' (Marketplace-eligible) vs 'Selected workspaces only' (not eligible). You choose at creation time.
Fill in connection details, redirect URI(s) under OAuth configuration, and capabilities (read/update/insert content, comments…). Note that Notion now calls integrations 'connections'.
↗ www.notion.so/profile/integrationsStore them in your secret manager. Never ship them to the browser.
Authorize: https://api.notion.com/v1/oauth/authorize with client_id, response_type=code, owner=user, redirect_uri. Exchange the code at /v1/oauth/token with HTTP Basic auth (client_id:secret).
Users choose which pages to grant during OAuth. Your agent sees nothing else. Offer a template, or tell users to share the right pages, or the agent will look broken.
Make it production-ready
Listing requires passing Notion's security review. You can run a public connection without listing it.
04Requirements, scopes & nuances
You'll need
- ▸A Notion workspace where you can create connections (workspace owner for internal connections). sourced[notion-auth]
- ▸Redirect URI(s) registered on the connection. sourced[notion-auth]
- ▸Privacy policy and terms URLs are expected for public connections. inferred[n8n]
Gotchas
- !Access is per-page, chosen by the user at consent. New pages aren't visible to your agent unless shared. sourced[notion-public]
- !Installation scope is chosen at creation. 'Selected workspaces' connections can't be listed in the Marketplace. sourced[notion-public]
- !Terminology changed ('integrations' → 'connections'). Many tutorials use old UI names. sourced[notion-ov]
- !Notion's docs say the Authorization URL field populates after the public connection is 'submitted for review'. We couldn't confirm whether that means the creation form or the Marketplace review. inferred[notion-auth]
| Scope / permission | Tier | Note | Evidence |
|---|---|---|---|
| Read content | basic | Notion uses 'capabilities', not OAuth scope strings. | sourced[notion-ov] |
| Update / Insert content | basic | Write capabilities. | sourced[notion-ov] |
| Read comments / user info | basic | Optional capabilities. Email access is a separate choice. | inferred |
05If you get blocked
→ The page wasn't granted. Have the user re-run OAuth and select it, or share it with the connection via '…' → Connections.
→ Launch unlisted (any-workspace public connection works without listing) and treat Marketplace as distribution, not a gate.
06Evidence: what was tested, sourced, and still uncertain
Sources read
- [notion-auth] Notion — Authorization official
- [notion-public] Notion — Public connections official
- [notion-ov] Notion — Connections overview official
- [n8n] n8n docs — Notion credentials third-party
- [composio] Composio — Managed OAuth apps directory official
- [probe] Live HTTP probes run by the agent (dummy client_id, no credentials) probe
Still uncertain
- ? Notion publishes no Marketplace review timeline. 1–4 weeks is our guess.
- ? Privacy policy / terms requirement comes from third-party docs, not Notion's current pages.
- ? The Marketplace guidelines URL we tried returned 404, so the review criteria weren't read directly.