はじめに
hkob の雑記録の第252回目は、Create a page のアンドキュメントな仕様について考察します。
Create a page end point
Create a page の endpoint はこちらで紹介されています。
ページを作成するには、どの親の下に作成するかを決める必要があります。2022-06-28 までは、page_id を指定してページの下に作成するか、database_id を指定してデータベースの下に作成することができました。
上に書かれている 2025-09-03 では、データベースはコンテナになったため、後者は data_source_id を指定してデータソースの下に作成するように変更されています。NotionRubyMapping のテストデータ取得のスクリプトは以下のようになっています。
curl 'https://api.notion.com/v1/pages' \ -H 'Authorization: Bearer '"$NOTION_API_KEY"'' \ -H "Content-Type: application/json" \ -H "Notion-Version: 2025-09-03" \ --data '{ "parent": { "data_source_id": "f0a1bf337ff04d24b5b6efb3ea006b15" }, "properties": { "Name": { "type": "title", "title": [ { "type": "text", "text": { "content": "New Page by data_source_id", "link": null }, "plain_text": "New Page by data_source_id", "href": null } ] } } }'
アンドキュメントな仕様
実は、このスクリプトを作成する前に以下のスクリプトを作成して、実行していました。
curl 'https://api.notion.com/v1/pages' \ -H 'Authorization: Bearer '"$NOTION_API_KEY"'' \ -H "Content-Type: application/json" \ -H "Notion-Version: 2025-09-03" \ --data '{ "parent": { "database_id": "1d6b1040a9fb48d99a3d041429816e9f" }, "properties": { "Name": { "type": "title", "title": [ { "type": "text", "text": { "content": "New Page by database_id", "link": null }, "plain_text": "New Page by database_id", "href": null } ] } } }'
このスクリプトは以下の sed スクリプトで作成されたものです。実はこれまでスクリプトを一つずつこのスクリプトにかけながらテストがエラーにならないかを全てチェックしている中で作成されたものです。
sed -i '' -e 's/2022-06-28/2025-09-03/' create_page_parent_database.sh ; make
本来このスクリプトはリファレンス通りであれば、エラーになるはずでした。しかし、以下のように database_id を指定した場合にも、内部の data source が一つだけであればこれまで通りの end point のままでもページが作成できるようです。
{ "object": "page", "id": "267d8e4e-98ab-814e-a3af-ea14f25efd79", "created_time": "2025-09-07T08:33:00.000Z", "last_edited_time": "2025-09-07T08:33:00.000Z", "created_by": { "object": "user", "id": "019a87c7-d197-44a4-b19a-baa684400f81" }, "last_edited_by": { "object": "user", "id": "019a87c7-d197-44a4-b19a-baa684400f81" }, "cover": null, "icon": null, "parent": { "type": "data_source_id", "data_source_id": "f0a1bf33-7ff0-4d24-b5b6-efb3ea006b15", "database_id": "1d6b1040-a9fb-48d9-9a3d-041429816e9f" }, "archived": false, "in_trash": false, "properties": { "Tags": { "id": "%3A%3EFq", "type": "multi_select", "multi_select": [] }, "title2": { "id": "S%5C%7B%3C", "type": "rich_text", "rich_text": [] }, "Related to Sample table (Column)": { "id": "jZZ%3E", "type": "relation", "relation": [], "has_more": false }, "Name": { "id": "title", "type": "title", "title": [ { "type": "text", "text": { "content": "New Page by database_id", "link": null }, "annotations": { "bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default" }, "plain_text": "New Page by database_id", "href": null } ] } }, "url": "https://www.notion.so/New-Page-by-database_id-267d8e4e98ab814ea3afea14f25efd79", "public_url": "https://hkob.notion.site/New-Page-by-database_id-267d8e4e98ab814ea3afea14f25efd79", "request_id": "36b8a149-1d85-4519-bb7d-fb91277bbb5f" }
アプリ作成者に向けて
大量のユーザを抱えるアプリ制作者の場合、全てのユーザに database_id から data_source_id に変更してもらう作業をお願いするのはなかなか大変です。database_id を指定して、その下にページを追加するアプリの場合(そのようなアプリが大部分だと予想しています)には、以下のような対応をするのはどうでしょうか?
- アプリ自体は 2025-09-03 対応に更新
- 設定に database_id が設定されている場合には、その情報は保持しておきこれまで通り Create a page を database_id で呼び出し
- データベースを複数のデータソースに変更しない場合には、そのまま使える旨を連絡
- 設定画面には data_source_id の設定を別に用意し、基本的なマニュアルには data_source_id の設定方法を記述 (データソースIDの取得は以前よりも簡単になるので、それをマニュアルに記載)

おわりに
Create a page end point で database_id でもページが作成できるのは、これまでのアプリがいきなり動かなくなることを防ぐためだと思います。ただ、アンドキュメントな仕様なので、早いうちに data_source_id への対応を進めてもらほうがいいとは思います。