Notion

The Notion pages and databases your client chooses to share.

Website
notion.com
Connects by
Signing in with Notion
Category
Files and docs
Services
1
Tools
64
ServiceKey
Notionnotion

Connecting

Your client presses Connect, picks a workspace if they're in more than one, then selects the pages and databases to share in Notion's page picker.

Check they're connected
curl https://api.operate.as/v1/me/clients \  -H "Authorization: Bearer $OPERATE_AS_API_KEY"
Response
[  {    "id": "6f1c2a7e-...",    "name": "Miller Dental",    "services": [      "notion"    ]  }]

Good to know

Only the pages your client shares

The connection sees and edits the pages and databases your client picked, and the pages inside them. Everything else is out of reach, and Notion answers as if it doesn't exist. If a call can't find a page, the most likely reason is that it wasn't shared.

Sharing more later

Your client connects again from their link and picks more pages, or adds the connection from the page itself in Notion.

The version header is added for you

Notion requires a Notion-Version header on every request. Operate As adds Notion-Version: 2022-06-28 to every call, so you don't send it.

Permissions

What the client readsPermission it asks for
See and edit only the pages you choose on Notion's screenChosen on the provider's screen

Tools

Install Notion's typed package for your language:

pip install operate-as-notion
Run notion.search
curl -X POST https://api.operate.as/v1/actions/notion.search \  -H "Authorization: Bearer $OPERATE_AS_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "clientId": "6f1c2a7e-...",    "input": {}  }'
InputTypeWhat it is
querystringWords in the title
Response
{  "status": 200,  "data": {    "…": "the service's own response"  },  "encoding": "json"}

Pass-through

Paths continue from https://api.notion.com/v1.

See Pass-through requests for the full request and response format.

Call any endpoint
POST /v1/clients/{clientId}/notion/search
Authorization: Bearer oa_...
Content-Type: application/json

{ "query": "Content calendar" }

When access ends

How long access lastsSet by Notion. If Notion handed over a renewal key, Operate As renews and checks the connection daily.
RenewalWith a renewal key, the daily check finds ended access. Without one, your next call returns Notion's 401.
What ends itYour client disconnects the app in Notion's settings, under connections.
When it's removedNotion has no way for an app to cancel its own access, so we delete our copy. Your client disconnects it in Notion's settings.

See Keeping access alive and Removing access.

Calls answer
HTTP/1.1 409 ConflictContent-Type: application/json{  "detail": "Miller Dental's Notion access ended. Send them their link to reconnect."}
Your webhook receives
{  "id": "evt_3f9a1c…",  "type": "connection.expired",  "createdAt": "2026-10-16T08:00:00+00:00",  "data": {    "clientId": "6f1c2a7e-...",    "clientName": "Miller Dental",    "provider": "notion",    "services": [      "notion"    ],    "reconnectUrl": "https://…"  }}