Forgejo・Gitea:プルリクの検索が 400「user does not exist」になる
リポジトリをまたいだプルリクは GET /api/v1/repos/issues/search?type=pulls から取ります。1人のユーザーか1つの組織のリポジトリなら owner=、自分に関わるものなら review_requested=true・reviewed=true・created=true を付けます。サーバーが検索を実行しないときは、400 か 422 を返し、理由は message にあります。以下は、2026年10月25日に Codeberg(Forgejo)と gitea.com が返した答えと、その裏にある Forgejo・Gitea 両方のソースの動きです。
HTTP/1.1 400 Bad Request
{"message":"user does not exist [uid: 0, name: old-name]","url":"https://codeberg.org/api/swagger"}
400 と 422:サーバーの文と理由
user does not exist [uid: 0, name: 名前](400・和訳:ユーザーが存在しません):owner=に書いた名前のユーザーも組織も、サーバーにありません。検索は持ち主を今の名前だけで探し、名前を変えたときに残る転送をたどりません(Forgejo も Gitea も)。なので、つづりの違う名前のほか、名前を変えたユーザーや組織の古い名前でもこの答えになります。リポジトリの古い住所は新しい住所へ転送されるのに、検索だけはこうなります。owner=にはユーザーだけでなく組織も書けます。名前が空の[uid: 0, name: ]で 401 なら、トークンの問題です(401 の意味へ)。Owner organisation is required for filtering on team(400・gitea.com は小文字の「owner」で始まる・和訳:チームで絞るには持ち主の組織が必要です):owner=なしでteam=を送りました。team does not exist [org_id 番号, team_id 0, name: 名前](400・和訳:チームが存在しません):owner=の組織に、その名前のチームがありません。parsing time "…"(422・和訳:日時を読めません):since=かbefore=が、サーバーの読める日時ではありません。2026-10-01T00:00:00Zのように書きます。
200 なのに、頼んだ一覧にならないとき
- トークンなしでは、
review_requested・reviewed・createdは無視されます。ソースは、これらをサインインしたユーザーにだけ当てはめます。トークンなしでreview_requested=trueやcreated=trueを付けた検索は、どちらのサーバーでも、付けない検索と同じ数のプルリクを返しました。公開のリポジトリの、開いているプルリクすべてです。 - 探すリポジトリ:
owner=があれば、その持ち主のリポジトリのうち、あなたに見えるもの。無ければ、サーバーの公開のリポジトリと、あなたのアカウントに見える非公開のリポジトリ。公開のリポジトリだけに限ったトークンなら、公開のものだけです。 - 1ページの件数:
limitはサーバーの上限(既定は50・MAX_RESPONSE_ITEMS)で切られ、limit=500にも50件が返りました。続きはpage=で読み、全体の数はX-Total-Countにあります。
直し方
user does not exist:サーバーで持ち主のページを開いて、つづりを確かめる。持ち主の名前が変わったなら、リポジトリの古い住所をブラウザで開くと新しい名前へ移るので、その名前で検索し、クローンも新しい住所に向け直す(名前を変えた・移したリポジトリへ)。- チーム:
owner=に組織を付け、チームの名前は組織のチームのページにあるとおりに書く。 - 日付:時刻とタイムゾーンまで付けて送る。
- 自分で絞る:検索にトークンを付けて送る。
IntelliJ IDEA で Forgejo・Gitea のプルリクを見るなら
Lesstep の Pull Request Inbox for Forgejo and Gitea は、JetBrains IDE(2024.1 以降)のプラグインです。「その持ち主」「どこでも」の範囲にサーバーの検索を使い、開いているリポジトリそれぞれの持ち主を owner= に、「自分のレビュー待ち」「自分がレビュアー」「自分が作成」の一覧には review_requested・reviewed・created を付けて送ります。トークンが無ければ、開いているプルリクすべてを一覧にして自分で絞る選択は止め(サーバーが無視するため)、「どこでも」では検索せずにトークンを求めます。サーバーが検索を断ったときは、サーバーの文を見せます。1.0.19 からは、持ち主の名前が変わった後の「その持ち主」で、リポジトリが今どこにあるかをサーバーに聞き、新しい名前で検索します。サーバーがその持ち主を知らなければ、そう言います。一覧はそれぞれ最近更新された順に最大200件です。読むのは無料、承認・コメント・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
このページは Forgejo プロジェクト・Codeberg e.V.・Gitea プロジェクト・JetBrains のいずれとも提携しておらず、推奨・承認も受けていません。Forgejo・Gitea・Codeberg はそれぞれの持ち主の名前、IntelliJ IDEA は JetBrains s.r.o. の商標です。
ほかに:404「The target couldn't be found.」「not found」 · 401「token is required」と知らないトークン · 「token does not have at least one of required scope(s)」 · Forgejo・Gitea のマージの断り(405・409) · チェックが合格したらマージの断り · Forgejo・Gitea のレビューの断り(422) · Forgejo・Gitea のブランチの更新の断り(403・409・422) · Forgejo・Gitea のプルリクが作れない(409・422・403) · Forgejo・Gitea のコメントの断り(403・422・400) · Forgejo・Gitea のプルリクの変更ファイル(50件ずつ・changed_files) · JetBrains の IDE で Forgejo・Gitea のプルリクを扱う · English