- 動作確認日:2026-10-11(n8n での修正)、2026-11-02(curl でエラーの再現)
- n8nのバージョン:2.7.4(セルフホスト、Hostinger VPS)
n8n から WordPress の REST API(外のプログラムから記事を読み書きする窓口)で、下書きも含めて記事を探そうとしたら、毎朝エラーで止まるようになりました。原因は status という指定です。ログインしていない問い合わせでは使えません。
起きたこと
n8n の新しいリリースを Claude が読んで、このブログに下書きを作るワークフローを使っています。同じ下書きが2本できないように、保存の前に「同じスラッグ(URL の英字の部分)の記事がないか」を探すノードを、Claude に足してもらいました。HTTP Request ノードで、下書きも探すために status を付けていました。
足して2日後の朝から、このノードで止まるようになりました。朝の本番2回と手で試した3回、計5回とも同じエラーです。
Bad request - please check your parameters
無効なパラメータ: status
エラーの中に status とあるので、最初は値の書き方の問題に見えます。調べたときのノードは status の値が draft だけになっていましたが、それでも同じエラーでした。【要確認:足したときの値は publish,draft,pending,future,private。draft だけに変えたのは誰か、エラーを直そうとして変えたのか】
このワークフローでは、記事を作ったあとにこのノードが動きます。そのため、止まるたびに Claude が記事を書いていて、Claude の API を5回分むだに使いました。「処理済み」の記録も書かれないので、毎朝同じことをくり返していました。
原因
status で下書きなどを探せるのは、ログインしている人だけです。ログインなしで同じ形の問い合わせを curl で送ると、エラーになります。
curl -s "https://automatelabo.com/wp-json/wp/v2/posts?slug=n8n-2-42-6&status=draft&_fields=id,status"
返ってきた内容です(読みやすいように日本語に戻して、改行を入れました)。
{
"code": "rest_invalid_param",
"message": "無効なパラメータ: status",
"data": {
"status": 400,
"params": { "status": "ステータスは禁止されています。" },
"details": {
"status": {
"code": "rest_forbidden_status",
"message": "ステータスは禁止されています。",
"data": { "status": 401 }
}
}
}
}
n8n の画面に出ていたのは「無効なパラメータ」までですが、中を見ると rest_forbidden_status(このステータスを指定する権限がない)とあります。値がまちがっているのではなく、権限の問題でした。
つまずいた理由は、ほかにも2つあります。
- 通ると思い込んでいた:ノードを足した日に、ログインなしだと 400 になることは見ていました。Claude は「Credential(n8n に登録したログイン情報)を使うので通る」と考えましたが、確かめませんでした。
- ノードまで動かせなかった:このノードは、記事にする価値のあるリリースが来たときだけ動きます。足した日は該当するリリースがなく、手で動かしても届きませんでした。確かめないまま本番に切り替え、次に該当するリリースが来た朝に初めて止まりました。
n8n からの問い合わせがログインした扱いにならなかった理由は、調べていません。調べた時点でこのノードに付いていたのは、別のサイト用の Credential でした。そちらの話はCredential が外れる記事に書いています。
直し方
今回は、ログインなしで status を付けない形に変えました。公開済みの記事だけを探す問い合わせです。以前に重なった下書きは、公開済みの記事と同じ内容でした。公開済みを探せば防げると考えて、この形にしました。
HTTP Request ノードの設定は次のとおりです。
- Authentication:None
- URL:
https://(サイトのドメイン)/wp-json/wp/v2/posts - クエリ:
slug(探すスラッグ)と_fields(id,status)。statusは入れない
同じスラッグの記事があれば1件、なければ空の一覧 [] が返ります。
下書きも探す必要があるときは、ログインして問い合わせます。この記事の下書きを保存したスクリプトでは、WordPress のアプリケーションパスワードで認証し、次の形で探してから保存しています。n8n ではなく Python のスクリプトです。
GET /wp-json/wp/v2/posts?slug=(スラッグ)&status=publish,future,draft,pending,private&_fields=id,status
確かめたこと
- 直したワークフローを本番に切り替える前に手で実行すると、すべてのノードを通って成功しました(2026-10-11)。探すノードの返事は
[]で、下書きが1本できました。その下書きはn8n 2.42.6 の記事として公開しています。 - 同じ記事を
statusなしで探すと、ログインなしで[{"id":240,"status":"publish"}]が返りました(2026-11-02、curl)。公開済みの記事は見つかります。 - アプリケーションパスワードで認証するスクリプトでは、
statusを付けて探したあと、下書きの保存まで進みました(2026-10-30)。 - 【要確認:本番に切り替えた日と、そのあと同じエラーが出ていないか。記録では 10-11 の時点で切り替え待ち】
まだ確かめていないこと
- 書き込みたいサイトの Credential を付けた HTTP Request ノードで、
statusが通るかは試していません。 - 今の形では、同じスラッグの下書きは見つけられません。下書きがあるときに保存へ進むとどうなるかも試していません。
このあと気をつけていること
- 新しく足したノードは、本番に切り替える前に、そのノードまで実際に動く実行で確かめる。
