Learn

The data_sources migration: Notion’s biggest API break

Announced August 26, 2025 and live September 3, Notion’s API version 2025-09-03 was the platform’s biggest break: databases became containers, their schema and rows moved to new data_source objects, and a set of core endpoints and webhook events changed shape. The change is not backwards compatible, and the fallout was immediate — automation platforms spent weeks catching up while their users’ workflows sat broken. Here is what changed, what actually broke (with the receipts), and how to build integrations that survive this kind of shift.

What actually changed

Per Notion’s official upgrade guide (as of July 2026), version 2025-09-03 introduces first-class multi-source databases — one database can now hold several tables — and reshapes the API around that:

  • A database is now a container with a data_sources array; the property schema and the rows live on each data_source.
  • Querying and schema updates move from /v1/databases to /v1/data_sources; retrieving a database returns pointers, not properties.
  • Creating a page under a database now takes a data_source_id parent instead of a database_id, and parent objects gain a data_source_id field.
  • Webhook events are renamed — database.content_updated becomes data_source.content_updated, database.schema_updated becomes data_source.schema_updated — with new data_source.created/moved/deleted events. Subscriptions must be updated to receive the new shapes.

The sharpest edge is what happens to integrations pinned to older versions: the moment a user adds a second data source to a database, the guide says creating pages under it, reading, writing, or querying it, and writing relation properties that point to it all fail. Pinning your Notion-Version header buys time only until one user clicks “add data source.”

The same read, before and after 2025-09-03
# Before: schema and rows hang off the database
GET  /v1/databases/{database_id}          # returns properties
POST /v1/databases/{database_id}/query    # returns rows

# After: the database is a container; go through the data source
GET  /v1/databases/{database_id}          # returns data_sources: [{id, name}]
GET  /v1/data_sources/{data_source_id}    # returns properties
POST /v1/data_sources/{data_source_id}/query

What broke: September 2025, in the platforms' own forums

Breaking changes are abstract until you read the support threads. Every citation below is a real, verified thread:

Zapier community · Sep 23, 2025

Notion integration update

The central Zapier thread on the migration. Zapier’s updated Notion actions initially sent the wrong parameter structure, and users’ Zaps failed for weeks. AnthonyOrtega: “We currently have 28 zaps affected by this bug, all of which have been down for about a week and half now.” alvinliang: “I run a Notion & automations consulting firm and all of my work has been put on pause, and all of my clients’ work has been put on pause.”

Zapier community · Sep 23 – Oct 17, 2025

“Find Database Items” no longer has item fields

Zapier’s find/update actions stopped exposing item fields after the change. A Zapier partner traced the root cause to the 2025-09-03 data-source split; the original poster, whose business ran on these automations: “I’m panicking pretty bad right now and am praying for a fix in the next few days” (VatcheM).

n8n community · Sep 12–29, 2025

Does n8n Notion node support latest api?

n8n’s Notion node was still calling API version 2022-02-22 when the change landed (confirmed in-thread by a moderator). Anton_Lvovych: “This is unacceptable. All Notion integrations connecting databases that use the new feature are essentially broken.” The thread ended unresolved, with a GitHub issue still awaiting an official response.

Retool forum · Sep 21, 2025

Notion connection issue — cannot see updated API endpoints (2025-09-03)

A Retool user hitting the legacy query endpoint got the new refusal — “Databases with multiple data sources are not supported in this API version” — while the replacement data_sources endpoints hadn’t surfaced in Retool’s Notion connector yet. Staff acknowledged the not-backwards-compatible change with no timeline.

GitHub · PipedreamHQ/pipedream · Aug 28, 2025 · closed (fixed)

Notion API update 2025-09-03

The healthy-vendor counterexample: Pipedream opened a tracking issue two days after the version was announced, enumerated every affected component, and shipped the migration. Even in the good case, that’s engineering time spent renaming database_id to data_source_id across a product.

How to survive it (on Notion)

  • Read the official upgrade guide end-to-end before touching code; the parent-object changes are easy to miss.
  • Discover and persist data_source_id for every database you touch — treat database_id as a container key only.
  • Update webhook subscriptions and handlers for the renamed data_source.* events; the old database.* names stop matching reality.
  • Test against a database that actually has two data sources — the failure mode only appears when a user adds one.
  • If you depend on a no-code platform (Zapier, n8n, Make), pin your Zaps/nodes to the legacy integration version until the vendor’s migration is confirmed stable — and accept that a user adding a data source can still break you.

One mercy, per Notion’s own upgrade FAQ (July 2026): “We don’t currently have any process for halting support of old Notion API versions” — old versions keep working against single-data-source databases. The cliff is per-database and user-triggered, not a dated shutdown.

Our stance: version the API, put the data in the event

We build a board API for a living, so an honest read: the data-source model itself is defensible — multi-table databases are a real feature. The damage came from how the change moved through the ecosystem: a core resource changed identity, and every consumer had to rediscover it at once.

Novum OS’s API design takes the opposite bets:

  • Versioned, additive-first. Everything lives under /v1; changes ship additive (new fields, new endpoints). A reshape of that magnitude would be a new version running alongside, not a shift under your integration.
  • Webhook payloads carry the changed fields inline, delivered at-least-once with idempotency keys. Consumers that don’t chase follow-up fetches have far less surface area exposed to endpoint reshapes — see why diff-less payloads cost double.
  • One concept for the board. A board is a board — columns and status groups are first-class, editable via the API, with no container/schema split for integrations to re-learn.

Quick answers

What changed in Notion API version 2025-09-03?

Databases were split into two objects: a database is now a container, and its schema and rows live on one or more data_source objects. Query and schema operations moved from /v1/databases to /v1/data_sources, creating a page requires a data_source_id parent instead of a database_id, and webhook events were renamed (database.content_updated became data_source.content_updated, with new data_source.* events). The change is not backwards compatible.

Will an integration pinned to an older Notion API version keep working?

Only until a user adds a second data source to a database it touches. Per Notion’s upgrade guide, once that happens, creating pages under the database, reading, writing, or querying it, and writing relation properties that point to it all fail for older-versioned integrations. Pinning buys time; it is not a fix.

What broke when Notion shipped the data_sources change?

Automation platforms took the hit hardest. In late September 2025, Zapier community threads documented Zaps failing for weeks — one user counted 28 Zaps down, an agency owner described all client work paused — while n8n’s Notion node was still pinned to API version 2022-02-22 and Retool users could not reach the new data_sources endpoints at all.

How do I make my board integration resilient to API breaking changes?

Store data_source_id alongside database_id, subscribe to the renamed webhook events, and test against a database with two data sources. More structurally: prefer APIs whose webhook payloads carry the changed data inline — every follow-up fetch you don’t make is a schema change you don’t feel. Novum OS versions its API under /v1 and ships webhook payloads with changed fields inline for exactly this reason.

Build on a board API designed not to shift under you — free tier, no card, full API and MCP included.

Create account

Every thread and issue linked on this page was individually loaded and verified, quotes are short excerpts of text observed there, and third-party claims reflect public documentation, as of July 2026. Threads and docs may change after that; linked discussions reflect their authors’ own views at the time of posting.