Known differences

Notion

A Notion workspace that answers the REST API notion-client calls, Notion's public-integration OAuth, webhook events and Notion's MCP tools.

Vendor reference: https://developers.notion.com/reference/intro ↗. Machine-readable: compat/notion.json.

Surfaces

KindPathNotes
REST/v1pages, databases, data sources, blocks, comments, users, search, file uploads; Notion-Version header required
OAuth/v1/oauthauthorize, token, introspect, revoke with Notion's token body
Webhookswebhook eventsdelivered to a subscribed endpoint, retried with backoff
MCP/mcpbearer-authenticated, with RFC 9728 discovery for clients that register themselves

API versions: Notion-Version 2022-06-28, 2025-09-03, 2026-03-11

Supported

Not supported

Known differences and test guidance

ScenarioDifference from NotionIn your tests
Search rankingSearch ranks by substring match, not Notion's relevance model.Assert that a page is found, not on its position.
Async tasksallow_async and notion-duplicate-page return real task handles, but the work is done before the handle is issued.Do not assert on an in-progress state.
Rate limitsThere is no 180 requests/minute limit; limits are only what you inject.Inject throttle to test backoff.
File URLsUpload bytes are held in the process and served from the replica's own signed /v1/files/... URL, not Notion's CDN.Do not assert on the file host.
Failing webhooksA refused delivery is retried with backoff, but a subscription is never disabled after repeated failures.Do not test webhook auto-disable.
RestartsWrites last until the process stops unless persistence is configured; upload bytes, webhook subscriptions and faults are never kept.Treat each run as starting from the seeded workspace.

Fault injection

KeyWhat the client sees
throttle429 {"object": "error", "code": "rate_limited"} with Retry-After
fail_nextThe next N calls fail as throttle does, then clear
quota_limit429 rate_limited "Request quota exhausted"
error_rate500 internal_server_error for the given fraction of calls
latency_msFixed added latency on every data-plane request

Applies to every system