Notion connector setup

Operator·2 minutes to read

This page is the setup half — creating the integration Notion needs in its own integrations console and getting its client id and secret into this deployment. Authorising a connection afterwards is the Authenticate control on the plugin sheet, which is what actually sends you to Notion.

1. Create the integration in the Notion integrations console

  1. Open the Notion integrations page and create a new public integration — this is your own integration, not Botseon's.

  2. Under OAuth Domain & URIs → Redirect URIs, add the redirect URL from docs/connectors/README.md — with the quickstart's default BOTSEON_PUBLIC_URL, that is:

    http://127.0.0.1:3000/api/oauth/notion/callback
    
  3. Save. The integration's Secrets tab shows you an OAuth client ID and an OAuth client secret — copy both now.

2. Scopes

  • notion:all — the pages, databases and comments the workspace member shares with this integration.

notion:all is a sentinel, not a scope Notion narrows at authorisation: Notion grants capabilities on the integration rather than per authorisation, so what this connector can reach is chosen in Notion's own integration settings (Capabilities), not on the consent screen.

3. Enter the app

One command, with the client secret on standard input — there is no flag that takes it and no environment variable that holds it (see docs/connectors/README.md):

printf %s "$CLIENT_SECRET" | botseon oauth-app set \
  --org <organisation id> --slug notion \
  --client-id <the client ID from step 1> \
  --auth-url https://api.notion.com/v1/oauth/authorize \
  --token-url https://api.notion.com/v1/oauth/token \
  --configured-by <your user id>

Both URLs are read from Notion's own current documentation (Authorization), not invented here.

It stores the secret encrypted and prints the redirect URL from step 1 back, so you can check the two match. botseon oauth-app show --org <organisation id> --slug notion says whether an app is configured and under which client id; nothing prints the secret back.

Never put either value in a bot's description, a memory, or anywhere else a model reads as ordinary text.

Last verified against build 445930e.