What was straightforward:
Auth setup. One token, one header, works immediately. The verify.js script confirmed access in two calls.
Page content creation (Step 4 of the core task). Appending blocks in a single pages.create call with a children array was clean and predictable.
Where I had to work around something:
The database/data source split. This was the biggest source of friction. The API version 2025-09-03 split databases from dataSources, but nothing in the SDK, the quickstart, or the error messages pointed at this. I only discovered it because the SDK emitted a warning about properties being an unknown parameter — silently ignoring it rather than failing.
Finding dataSources.query. The old databases.query simply doesn't exist on the databases namespace anymore, but the error was notion.databases.query is not a function — which reads like a version issue or a typo, not a structural API change. I had to enumerate the SDK's available methods to discover dataSources was a separate namespace entirely.
Select option validation. Setting a select property to a non-existent option feels like it should fail. Notion silently extends the schema. This is arguably a product choice, but from a data-integrity standpoint it's a footgun. There's no strict mode or schema-validation flag.
The underlying API is capable and the data model is sound. The friction was almost entirely in the transition from the old to the new version, and in documentation that hasn't caught up to the object model split. A developer who started today with the 2025-09-03 docs as the baseline would have a cleaner experience.