更新日: ・ 自動化ノートの管理人

Notion APIが「object_not_found(404)」を返すときの確認手順

スクリプトからNotion APIでページを読もうとしたら、「見つからない」と返ってきた。IDはURLからコピーしたものだし、トークンもほかのページでは動いている。それなのに、なぜか404になる。

私も、すでに動いているトークンを新しい用途に使い回したとき、まさにこの状態で止まりました。しかも自動実行だったので、エラーに気づくまで何日も静かに失敗し続けていました。この記事では、404が出たときに確かめる順番をまとめます。

404(object_not_found)の意味

Notionの公式ドキュメントでは、このエラーは「使ったトークンから見て、そのリソースが存在しない」という意味だと説明されています。そして、「そのリソースがトークンの持ち主に共有されていない」ことを示す場合もある、と添えられています。エラーのメッセージにも、次のような一文が入ります。

"code": "object_not_found",
"message": "… Make sure the relevant pages and databases are shared with your connection."

つまり404は、「本当に無い」だけでなく、「あなたの鍵からは見えない」という意味でもあります。実際には、後者であることがほとんどです。

404が出たときに確かめる順番

  1. 1. コネクトそのページ(か親ページ)に「コネクトを追加」したか
  2. 2. IDの種類ビューのIDや、データソースのIDと取り違えていないか
  3. 3. 元のデータベースリンクドデータベースやリレーション先も共有したか
Notionの公式ドキュメントの説明をもとに、確かめやすい順に並べたものです。

いちばん多い原因: ページに「コネクトを追加」していない

APIのインテグレーション(コネクト)は、作っただけではどのページも読めません。公式ドキュメントでは、インテグレーションがページを操作する前に、そのページを手動でインテグレーションに共有する必要がある、と説明されています。

共有は、Notionの画面で次のように行います(Notionヘルプセンターの手順)。

  1. 対象のページを開き、右上の「•••」を選ぶ
  2. メニューの下のほうにある「コネクトを追加」をクリックする
  3. 使っているインテグレーションを検索して選ぶ

親のページにコネクトを追加すると、その下にあるページにもまとめてアクセスできるようになります。公式ドキュメントにも、親ページへのアクセスを与えれば、その子ページすべてにアクセスできると書かれています。家の用事に使うページを1つの親ページの下に集めておき、その親ページにだけコネクトを追加しておくと、新しいページを作るたびに設定し直さずに済みます。

私がはまったのは、ここでした。トークンを使い回したので「もう設定済み」と思い込んでいましたが、新しく対象にしたページは別の親ページの下にあり、コネクトが追加されていなかったのです。

そのほかの原因

原因確かめ方・直し方
ビューのIDを使っているデータベースのURLの「v=」の後ろはビューのIDで、データベースのIDではありません。「/」の後ろ、「?」の前の32文字を使います
データベースのIDとデータソースのIDの取り違えAPIのバージョン2025-09-03以降では、データベースとデータソースは別のIDです。公式ドキュメントでも、互いに置き換えて使えないと説明されています
リンクドデータベースを共有している別のページに表示しているだけのデータベース(リンクドビュー)を共有しても足りません。元のデータベースを共有します
リレーション先のデータベースリレーションでつながった先のデータベースの情報を取るには、そのデータベースも共有が必要です

URLのどこがIDなのかは、NotionのID取り出しツールでURLを貼ると確かめられます。ページやデータベースのIDとビューのIDを、区別して表示します。

401・403との違い

似たエラーに401と403があります。公式ドキュメントの説明は次のとおりです。

状態コード意味
401unauthorizedトークンが正しくない(コピーの漏れや、古いトークンのままになっている等)
403restricted_resourceトークンに必要な権限がない、またはワークスペースのブロック数の上限に達している
404object_not_foundトークンから見てリソースが存在しない、または共有されていない

401ならトークンを、403ならインテグレーションの権限の設定を、404ならまずコネクトを疑う、と覚えておくと切り分けが早くなります。

静かに失敗し続けないために

自動実行のスクリプトでは、404を「データが無かった」と同じに扱ってしまうと、何日も気づけません。私は次の2つで防ぐようにしています。

まとめ

APIのトークンを使わずに、Claude Codeから自分の権限でNotionを操作する方法もあります。Claude CodeからNotionを読み書きできるようにする(Notion MCPのつなぎ方)で紹介しています。