If you have a Notion integration that "fetches all the rows in this database" — a sync job, an export, a reporting pipeline — it may have started returning incomplete data without throwing anything. As of an early-2026 API change, Notion's paginated query and list endpoints enforce a hard 10,000-result maximum pagination depth . Past that point you don't get an error. You get a 200 OK , no next_cursor , and a new field telling you the result set was truncated — a field most existing code has never heard of and doesn't check. So the loop terminates normally, the caller treats the partial set as the whole set, and everything downstream — the warehouse table, the dashboard, the "we synced N records" log line — is quietly wrong for every database with more than 10k matching rows. What Actually Changed The classic Notion pagination contract was: call the endpoint, read results , if has_more is true call again with start_cursor: next_cursor , repeat until has_more is false .…