Skip to main content

Command Palette

Search for a command to run...

API

Origin API 変更履歴

エンドポイント、リクエストおよびレスポンスのスキーマ、スコープ、ウェブフックを含む Origin Public API の変更を、最新のものから日付順にまとめています。各変更には、破壊的変更、非推奨、追加、変更、削除のいずれか1つのラベルが付けられます。破壊的変更および非推奨の変更には、インラインで移行ガイダンスが含まれます。Origin API リファレンスには、常に最新の同期状態が反映されています。

  • 変更。 Merge Pull Request は、プルリクエストのヘッドブランチが最新の version の head より先に進んでいる場合 (たとえば、Origin がまだ新しいバージョンとして記録していないプッシュが反映された場合など) 、InvalidArgument (HTTP 400) ではなく Aborted (HTTP 409 Conflict) を返すようになりました。これは stale な expectedHeadSha を指定した場合と同じレスポンスです。どちらの場合も何もマージされません。プルリクエストを取得 で version.headSha に新しい head が返されるようになってから再試行してください。
  • 破壊的変更。 コメントスレッドとレビューのバージョン参照に createdAt が含まれなくなりました。保持されるのはバージョンの number、headSha、baseSha のみです。対象は、List Pull Request Comments、Get Pull Request Comment、Create Pull Request Comment、Update Pull Request Comment の thread.version、Update Pull Request Thread の version、List Pull Request Reviews、Create Pull Request Review、Update Pull Request Review、Dismiss Pull Request Review の pullRequestVersion、および pull_request.comment.created と pull_request.review.* のペイロード内の同じフィールドです。移行方法: 連携でスレッドまたはレビューのバージョンから createdAt を読み取っていた箇所では、代わりに Get Pull Request の version、またはそのバージョンを記録した pull_request.* ライフサイクルペイロードの version から、number で照合して読み取ってください。
  • 追加。 プルリクエストのバージョンに potentialMergeCommit が含まれるようになりました。これは、そのバージョンに対して Origin が行うテストマージです。state は prepared、merge_conflict、unknown のいずれかで、prepared の場合はマージコミットの sha と、マージの基点となったベースブランチの先端 baseSha も含まれます。List Pull Requests、Get Pull Request、Create Pull Request、Update Pull Request、Merge Pull Request の version で返され、pull_request.* ライフサイクルペイロードにも含まれるため、Webhook の受信側は Get Git Ref を呼び出さなくてもマージのプレビューを確認できます。イベントには発行時点の値が含まれるため、unknown は未確定として扱い、プルリクエストを再取得してください。
  • 追加。 Create Installation User Token は、要件を満たす名前空間メンバーに代わって動作するインストールユーザートークンを発行します: POST /v1/origin/app/installations/{installationId}/user_access_tokens。アプリ JWT と、namespace:user_tokens:write が付与されたインストールが必要です。ユーザーは userId または userEmail で指定します。任意の scopes と repositoryIds を指定すると、アクセス範囲を絞り込めます。トークンは 15 分以内に失効し、アプリ JWT より長く有効になることはありません。
  • 追加。 アプリがユーザーに代わって操作した場合、ユーザーの actor に performedVia.app が含まれることがあります。これにはアプリの id と、省略可能な displayName が含まれます。ユーザーが直接操作した場合は含まれず、委任データを取得できない場合にも含まれないことがあります。詳しくは Acting on behalf of users を参照してください。
  • 追加。 List Commits で authorEmails と committerEmails フィルターを指定できるようになりました。それぞれ重複を除いて最大 100 件のメールアドレスを指定できます。照合では大文字・小文字と前後の空白は無視されます。両方を指定した場合、コミットは両方のリストに一致する必要があります。フィルター適用後のページは空でも nextPageToken を持つ場合があるため、トークンが空になるまでページングを続けてください。
  • 変更。 キャンセルされたチェック実行によって、成功した結果が上書きされなくなりました。success、neutral、skipped で completed になっている実行に対し、結論が cancelled の completed を投稿した場合、externalUpdatedAt の値にかかわらず stale として無視されます。この場合、Post Check Run と Batch Upsert Check Runs は、保存済みの実行と outcome ignored_stale を含む 200 を返します。一方、新しい実行試行またはスイート試行として投稿されたキャンセルは、成功した試行より優先度が低くなるため、List Check Runs For Commit、List Check Suites For Commit、List Check Runs For Suite、Get Pull Request Mergeability は引き続き成功を報告します。なお、新しい失敗は従来どおり成功を上書きし、失敗中または保留中の実行には従来どおりキャンセルが適用されます。詳しいルールは Attempts and the current attempt を参照してください。
  • 追加。 List Namespaces は、リポジトリを一覧表示できる名前空間を slug 順に返します: GET /v1/origin/namespaces。対象となるのは、所属チームの名前空間、個人の名前空間、および権限付与されたリポジトリを含む名前空間で、そのうち namespace:repositories:read を持つものだけが返されます。そのため、各 namespace.slug は List Repos の ownerSlug としてそのまま使用できます。各エントリの viewerCanCreateRepositories は、その名前空間で Create Repo を実行した場合に、認可、および所有者のプランと設定のチェックを通過できるかどうかを示します。1ページあたりの名前空間数はデフォルトで30件、最大100件です。Cherri Code ユーザーの認証情報が必要ですが、スコープは不要で、コストは1ポイントです。アプリトークン、インストールトークン、サービスアカウントでは PermissionDenied (HTTP 403) が返されます。
  • 変更。 Update Pull Request でプルリクエストを再オープンした際、クローズ中に head が移動していた場合は新しい version が記録され、pull_request.head_ref.pushed が送信されるようになりました。これまでは、ブランチが再度プッシュされるまで、プルリクエストはクローズ時点の head を保持していました。記録される version には独自の headSha、baseSha、diff の統計情報が含まれ、プッシュ時に記録されるものと同じ形式です。マージ済みのプルリクエストには影響しません。
  • 変更。 Get Commit または List Commit Files に送信された短縮コミット SHA は、Get Git Commit と同じ方法で解決されるようになりました。解決対象はコミットオブジェクトのみのため、リポジトリ内の blob や tree と同じプレフィックスであっても、そのプレフィックスに一致するコミットが 1 つだけであれば解決されます。9月22日のエントリでは、Get Git Commit のみを対象として記載していました。Get Blob と Get Tag に変更はありません。

アプリとインストール

  • 変更。 インストールアクセストークンを作成 に、トークンの有効期限は最大 15 分で、リクエスト元のアプリ JWT の有効期限より後になることはない旨を明記しました。有効期間を固定値と想定せず、レスポンスの expiresAt を確認し、その時刻を過ぎたら新しいトークンを発行してください。

プルリクエスト

  • 破壊的変更。 Create Pull Request は parentPullNumber を受け付けなくなりました。これを含むリクエストはプルリクエストを作成せず、parent_pull_number を示す InvalidArgument (HTTP 400) を返します。そのため、このパラメーターを送信し続けるクライアントでは、スタックの親が暗黙的に失われることはなく、明示的にエラーになります。移行方法: 連携で parentPullNumber を送信していた箇所では、代わりに number メンバーを持つ parentPullRequest を送信してください。
  • 追加。 Delete Pull Request Comment は、Origin の id を指定してプルリクエストコメントを削除します: DELETE /v1/origin/repos/{ownerSlug}/{repoName}/pulls/comments/{commentId}。コメントの作成者はいつでも削除できます。それ以外の呼び出し元には repository:contents:write によるリポジトリへの書き込み権限が必要で、権限がない場合は PermissionDenied (HTTP 403) が返ります。スレッドの最後のコメントを削除するとスレッドも削除されますが、それ以外のコメントを削除してもスレッドは残ります。コメントのリアクションと編集履歴も併せて削除されます。存在しない id または削除済みの id の場合は 404 が返ります。repository:pull_requests:reviews:write が必要で、5 ポイントを消費します。
  • 追加。 プルリクエストのレスポンスに stack オブジェクトが含まれるようになりました。このオブジェクトには、スタックの id と、このプルリクエストのスタック上の親である parentPullRequest が含まれます。プルリクエストがスタックに属していない場合は省略され、ルートのプルリクエストでは parentPullRequest が含まれません。List Pull Requests、Get Pull Request、Create Pull Request、Update Pull Request、Merge Pull Request で返され、すべての pull_request.* ペイロードにも含まれます。配信された stack は、そのイベント発生時点のトポロジーを反映しています。
  • 追加。 Create Pull Request と Update Pull Request が parentPullRequest を受け付けるようになりました。これは number または id でスタックの親を指定するセレクターで、更新時には clear で親を解除できます。メンバーは 1 つだけ指定する必要があります。空のセレクター、clear: false、複数メンバーの指定、作成時の clear は、いずれも InvalidArgument (HTTP 400) を返します。この変更は関連付けのみを行うもので、ブランチは書き換えられません。また、base は同時に送信した場合にのみ変更されます。更新時は base の後に適用されるため、明示的に指定した親が、base の変更によって決まる親より優先されます。
  • 追加。 List Pull Requests が stackId (stack.id で返されるスタック id) を受け付けるようになりました。そのスタックのメンバーはスタック順ではなく指定したソート順で返されるため、各メンバーの stack.parentPullRequest を使ってスタックを再構築してください。state のデフォルトは引き続き open のため、スタック全体を取得するには state=all を指定してください。形式は正しくてもリポジトリ内のどのスタックにも該当しない id の場合は空のリストが返り、それ以外の値の場合は InvalidArgument (HTTP 400) が返ります。
  • 追加。 List Pull Requests が headSha (プルリクエストの head を示す、完全な 40 または 64 文字の 16 進数 SHA) を受け付けるようになりました。記録されたいずれかのバージョンの head コミットがその SHA と一致すれば、現在のバージョンか置き換え済みのバージョンかを問わずプルリクエストが選択されます。両者を区別するには、各結果の head.sha を比較してください。不正な形式、短縮形、存在しない SHA はいずれにも一致しません。

チェック実行

  • 非推奨。 Batch Upsert Check Runs のレスポンスに含まれる checkRuns は非推奨となりました。今後は results[].checkRun を使用してください。checkRuns は今後のリリースで削除される予定です。現在も、同じチェック実行が同じ順序で格納されています。移行方法: results[].checkRun を読み取ってください。保存された各チェック実行と、その書き込みの outcome がペアになっています。
  • 追加。 Post Check Run は outcome を、Batch Upsert Check Runs は results[] を返すようになりました。results[] には、投稿された各チェック実行に対応する要素がリクエスト順に含まれ、それぞれ checkRun とその outcome がペアになっています。値は created、updated、unchanged、ignored_stale のいずれかです。externalUpdatedAt が保存済みのタイムスタンプより古い投稿は無視されます。また、保存済みの値と同じ内容の投稿では何も変更されません。どちらの場合も保存済みのチェック実行とともに 200 が返され、updatedAt も変わらないため、両者を区別できるのは outcome だけです。
  • 変更。 チェック実行のアノテーションの message に Markdown を使用できるようになりました。Origin は、プルリクエストページの Checks タブと Changes のインラインカードの両方でこれをレンダリングします。Post Check Run と Batch Upsert Check Runs で指定でき、Get Check Run で返されます。rawDetails は引き続きプレーンテキストです。

Git データ

  • 変更。 Get Git Commit で省略形の sha を解決するのは、16 進数で 5 文字以上の場合のみとなり、解決対象もコミットオブジェクトに限定されました。その省略形に一致するコミットが存在しない場合や、複数のコミットが一致する場合、リクエストは失敗します。完全な SHA、ブランチ、タグ、HEAD は従来どおり解決されます。

SSH 証明書認証局

  • 追加。 List SSH Certificate Authorities は、所有者が git over SSH 用に信頼している SSH 認証局を新しい順に一覧表示し、所有者が証明書を必須としているかどうかを示す requireCertificates もあわせて返します: GET /v1/origin/owners/{ownerSlug}/ssh-certificate-authorities。レスポンスはページネーションに対応しておらず、各 certificateAuthorities[] エントリには id、name、keyType、fingerprint、publicKey、createdAt が含まれます。namespace:settings:read が必要です。
  • 追加。 Add SSH Certificate Authority は、所有者が信頼する認証局を追加し、追加した認証局を返します: POST /v1/origin/owners/{ownerSlug}/ssh-certificate-authorities。本文には、必須の publicKey (キータイプが ssh-ed25519、ecdsa-sha2-nistp256、ecdsa-sha2-nistp384、ecdsa-sha2-nistp521、またはモジュラスが 2048 ビット以上の ssh-rsa である OpenSSH authorized_keys の 1 行) と、255 文字以内の必須の name を指定します。証明書、サポートされていないキータイプ、または 2048 ビット未満の RSA キーを指定すると InvalidArgument (HTTP 400) が返されます。所有者がすでに登録しているキーを指定すると AlreadyExists (HTTP 409 Conflict) が返されます。この重複チェックは Origin 全体ではなく所有者単位で行われます。また、チーム所有ではない所有者の場合は FailedPrecondition (HTTP 400) が返されます。namespace:settings:write を持つ Cherri Code ユーザーの認証情報が必要です。
  • 追加。 Delete SSH Certificate Authority は、所有者から認証局を削除し、204 No Content を返します: DELETE /v1/origin/owners/{ownerSlug}/ssh-certificate-authorities/{certificateAuthorityId}。削除した認証局が署名した証明書はすべて使用できなくなります。所有者が証明書を必須としている間は最後の認証局を削除できず、削除しようとすると FailedPrecondition (HTTP 400) が返されます。namespace:settings:write を持つ Cherri Code ユーザーの認証情報が必要です。
  • 追加。 Set SSH Certificate Requirement は、所有者が SSH 証明書を必須とするかどうかを設定します: POST /v1/origin/owners/{ownerSlug}/ssh-certificate-authorities:setRequirement。本文には必須の requireCertificates ブール値を指定し、レスポンスには所有者の requireCertificates 設定が含まれます。必須に設定されている間、所有者のリポジトリに対する git over SSH では所有者の認証局が発行した証明書のみが受け入れられ、ユーザーが登録した SSH キーや HTTPS 経由のユーザー API キーは拒否されます。認証局が 1 つも登録されていない状態で証明書を必須にすると FailedPrecondition (HTTP 400) が返されます。現在と同じ値を設定した場合は、何も変更されずに成功します。namespace:settings:write を持つ Cherri Code ユーザーの認証情報が必要です。

Webhook

  • 追加。 pull_request.comment.reaction.added と pull_request.comment.reaction.removed を購読可能なウェブフックイベントとして追加しました。プルリクエストコメントにリアクションが付けられたとき、または削除されたときに配信されます。両イベント共通のペイロードには、pullRequest の参照、thread を含む comment の参照、content と reactor を含む reaction が含まれます。追加イベントは at-least-once で配信されます。リアクションしたユーザーが既に付けているリアクションを再度付けると、同じコメント・ユーザー・内容の組み合わせでイベントが再配信されるため、この 3 つの組み合わせで重複を集約してください。付けていないリアクションを削除しても、イベントは配信されません。
  • 変更。 pull_request.label.removed のペイロードに、ラベルを削除したプリンシパルを示す actor が含まれるようになりました (判明している場合) 。9 月 19 日のエントリでは、actor が設定されるのは pull_request.label.added のみと記載していましたが、実際にはプリンシパルが判明している場合、両方のイベントで設定されます。
  • 追加。 Delete Git Ref はブランチのリファレンスを削除します: DELETE /v1/origin/repos/{ownerSlug}/{repoName}/git/refs/{ref}。パスではブランチを refs/heads/<branch> または heads/<branch> の形式で指定します。削除できるのはブランチのリファレンスのみです。存在しないブランチを指定すると 404 を返します。リポジトリのデフォルトブランチ、削除ルールで保護されたブランチ、または別のホストからコンテンツがミラーリングされたリポジトリを指定した場合は、いずれも FailedPrecondition (HTTP 400) を返します。削除の処理中にブランチの先端が移動した場合は FailedPrecondition (HTTP 400) または Aborted (HTTP 409 Conflict) を返します。その場合は再試行して新しい先端を削除してください。削除されたブランチを head とするプルリクエストは、プッシュで削除した場合と同様にクローズされます。repository:contents:write が必要で、5 ポイントを消費します。
  • 追加。 pull_request.label.added と pull_request.label.removed をウェブフックイベントとして購読できるようになりました。プルリクエストにラベルが付与されたとき、または付与が解除されたときに配信されます。共通のペイロードには pullRequest リファレンスと label のスナップショットが含まれます。pull_request.label.added の場合のみ、ラベルを付与したプリンシパルを示す actor も含まれます。ラベル定義を削除すると、そのラベルが付与されていたプルリクエストごとに pull_request.label.removed が 1 件ずつ配信されます。
  • 破壊的変更。 アプリを作成 で、名前空間の所有者が オリジン への書き込み資格を持っているかが検証されるようになりました。これは Create Repo で常に適用されてきた前提条件と同じです。ユーザーが所有する名前空間でそのユーザーが Pro、Pro Student、Pro+、Ultra、Start のいずれのプランにも加入していない場合、またはチームが所有する名前空間でそのチームに有効な有料チームプランがない、プライバシーモード (Legacy) を使用している、あるいはチーム管理者によって オリジン が無効化されている場合、これまではアプリが作成されていたリクエストに対して FailedPrecondition (HTTP 400) が返されるようになります。このチェックで参照されるのは、呼び出し元ユーザーではなく名前空間の所有者の資格です。移行方法: オリジン に書き込み可能な所有者の名前空間でのみアプリを作成し、連携でアプリの作成を前提としている箇所では FailedPrecondition を処理してください。
  • 変更。 オリジン がウェブフックの受信側に許容する配信への応答時間が、5秒から10秒に延長されました。この期限には DNS の名前解決、接続、TLS ハンドシェイク、レスポンスまでの時間が含まれ、すべての試行に適用されます。期限を超えた試行はトランスポートエラーとして扱われ、再試行 に記載されたスケジュールに従って再試行されます。
  • 破壊的変更。 Get Repo Tarball のアーカイブは、リポジトリツリーを {ownerSlug}-{repoName}-{shortSha}/ という名前の単一のトップレベルディレクトリで包むようになりました。shortSha は解決済みコミットの先頭 7 桁の 16 進数で、GitHub の tarball endpoint のレイアウトに合わせています。以前は、アーカイブエントリはラッピングディレクトリなしで tar のルート直下に配置されていました。移行方法: tar のルートからエントリを読み取っていた連携では、展開時に先頭のパス要素を 1 つ取り除いてください (例: tar --strip-components=1) 。
  • 破壊的変更。 Get App では、9月12日 のエントリでこの endpoint とともに告知された app:settings:read スコープに代わり、アプリを所有する名前空間に対する namespace:apps:read が必要になりました。app:settings:read は何も承認しなくなり、スコープカタログから削除されました。app:settings:write に変更はなく、引き続き Update App、Add App Signing Key、Revoke App Signing Key に適用されます。移行方法: 連携で app:settings:read を保持していた箇所では、代わりにアプリを所有する名前空間に対する namespace:apps:read を保持してください。
  • 追加。 List App Installation Repositories が filter を受け付けるようになりました。これはリポジトリ名とオーナーの namespace を対象とした、大文字と小文字を区別しない部分一致フィルターです。スラッシュを 1 つ含む owner/repo 形式の値では、スラッシュの前後をそれぞれ対応するフィールドと照合します。先頭と末尾の空白は無視され、値が空の場合はフィルターが適用されません。ページトークンには発行時のフィルターが紐づくため、後続ページをリクエストする際は同じフィルターを送信してください。
  • 変更。 OpenAPI 仕様 では、文字列の enum スキーマに format: enum を付与しなくなりました。このキーは OpenAPI や JSON Schema に登録された形式ではなく、隣接する enum リストと重複しているうえ、これを名前付き型にマッピングするジェネレーターではコンパイルできないコードが出力されていました。スキーマ名、enum の値、送受信される JSON に変更はありません。修正された型を反映するには、この仕様から生成したクライアントを再生成してください。
  • 破壊的変更。 repository.check_run.created および repository.check_run.completed のペイロードに、ペイロードレベルの actor が含まれなくなりました。この値は所有元のチェックスイートのプリンシパルと重複しており、同じペイロード内の checkSuite.actor および checkRun.actor ですでに提供されています。移行方法: 連携でペイロードのトップレベルの actor を読み取っていた箇所では、代わりに checkRun.actor を読み取ってください。この値は常に所有元スイートの actor と一致します。
  • 破壊的変更。 Grep Contents の caseInsensitive と wholeWord は、literal が true の場合にのみ適用されるようになりました。正規表現検索では、これまで有効だったこれら 2 つの boolean が無視され、(?i) のみの query は InvalidArgument (HTTP 400) を返します。移行方法: boolean を引き続き使用するには literal を設定してください。正規表現検索の場合は、代わりに query の先頭に (?i) を、単語境界に \b を記述してください。
  • 破壊的変更。 OpenAPI specification で、Thread コンポーネントスキーマの名前が CommentThread に変更されました。このスキーマは Update Pull Request Thread のレスポンススキーマであり、プルリクエストコメントの thread オブジェクトの型でもあります。フィールド名、パス、オペレーション ID、送受信される JSON は変更されないため、レスポンスを直接読み取る連携では対応は不要です。移行方法: specification から生成したクライアントを再生成し、生成コードで Thread という名前を使用していた箇所の型名を変更してください。
  • 追加。 Add App Installation Repositories は、既存のインストールの選択対象にリポジトリを追加し、更新後のインストールを返します: POST /v1/origin/namespaces/{namespaceSlug}/installations/{installationId}/repos。リクエストボディには必須の repoIds 配列を指定します。指定したリポジトリは現在の選択対象に統合されます。この書き込みでインストールのスコープが変更されることはなく、指定したリポジトリがすべて権限付与済みの場合は、何も変更せずに成功します。名前空間外のリポジトリ、名前空間内のすべてのリポジトリをすでに対象としているインストール、停止中のインストール、インストール単位のスコープ導入以前に作成されたインストールでは、いずれも FailedPrecondition (HTTP 400) が返され、権限付与は行われません。namespace:installations:write を持つ Cherri Code ユーザー認証情報が必要で、コストは 5 ポイントです。初回のインストールには、これまでどおりブラウザでの名前空間管理者の同意が必要です。
  • 追加。 課金対象の Git over HTTPS レスポンスに X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Used が含まれるようになり、X-RateLimit-Resource には git が設定されます。Git の使用量は、Rate limits で core として説明されている REST の上限とは別枠で計測されます。上限を超えた Git リクエストは Retry-After と X-RateLimit-Reset を付けて 429 を返します。計測対象外のリクエストには、レート制限ヘッダーは含まれません。
  • 変更。 Upsert Repository Grant と Upsert Namespace Grant は、従来の組織グループに加えて、リソース所有者のチーム自身が所有する group プリンシパルも受け付けるようになりました。チーム自身のグループは、そのチームが組織に紐付いていなくても権限付与できます。一方、別のチームが所有するグループでは、引き続き FailedPrecondition (HTTP 400) が返されます。プリンシパルの種類については Grants ページを参照してください。
  • 破壊的変更。 Create Repo では、namespace:new_repository:write に代わって namespace:repositories:create が必要になりました。namespace:new_repository:write は何も認可しなくなり、スコープ一覧から削除されています。移行方法: インテグレーションで namespace:new_repository:write を要求していた箇所では、Cherri Code ユーザー認証情報で namespace:repositories:create を要求してください。
  • 追加。 Get Pull Request Mergeability は、プルリクエストをマージできるかどうかと、マージできない場合はその原因となっている型付きの条件を返します: GET /v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/mergeability。verdict は mergeable または blocked です。blockers の各エントリには、kind、人間が読める形式の message、およびそのエントリが属する evaluatedPullRequests 内のプルリクエストが含まれます。そのため、スタック内のプルリクエストの verdict は、スタックのルートからそのプルリクエストまでのすべてのプルリクエストが対象になります。任意指定の expectedHeadSha ガードを使うと、head が移動していた場合に Aborted (HTTP 409 Conflict) が返されます。また、ミラーリポジトリや、200 件を超えるプルリクエストで構成されるスタックに対しては FailedPrecondition (HTTP 400) が返されます。この操作はプレビューとして公開されており、OpenAPI specification で x-cursor-visibility: PREVIEW とマークされています。レスポンスをデコードする際は未知のフィールドや未知の enum 値を許容し、認識できない verdict は blocked として扱ってください。repository:pull_requests:read が必要で、10 ポイントを消費します。
  • 追加。 Grep Contents は、指定した ref 時点のリポジトリ内ファイルのテキストを検索し、一致する行を返します: POST /v1/origin/repos/{ownerSlug}/{repoName}:grep。ボディでは、必須の query (literal が設定されていない限り正規表現として解釈) に加え、ref、caseInsensitive、wholeWord、contextBefore と contextAfter (10 を超える値は 10 に丸められます)、filterPath、glob リストの includes と excludes (それぞれ最大 20 エントリ)、maxResults (デフォルト値・最大値とも 1000) を指定できます。返される各エントリは 1 行に対応し、limitHit が false の場合にのみレスポンスは完全です。ページネーションはありません。repository:contents:read が必要で、5 ポイントを消費します。
  • 追加。 チェック実行の status に 4 つ目の値 rerequested が追加され、List Check Runs For Commit で status フィルターとして指定できるようになりました。この値は、完了済みの実行に対して再実行が要求されたものの、所有するアプリがまだ応答していない状態を示します。保留中として扱い、queued と同様に表示してください。この値は Get Check Run、List Check Runs For Suite、List Check Runs For Commit、Rerequest Check Run で返されます。この値を設定できるのは Origin のみで、この値を含む Post Check Run または Batch Upsert Check Runs リクエストは InvalidArgument (HTTP 400) を返します。
  • 追加。 List Pull Requests で sortBy を指定できるようになりました。値は created (作成順、デフォルト) または updated (最終更新日時順) です。direction は sortBy を基準に並び順を決め、デフォルトは引き続き desc です。ページトークンには発行時のソート条件が含まれるため、別のソート条件で再利用したトークンは拒否されます。
  • 追加。 List Pull Requests で state=merged を指定できるようになり、マージ済みのプルリクエストのみを一覧表示できます。closed は引き続き、マージ済みのものを含め、open でなくなったすべてのプルリクエストを対象とするため、既存の呼び出し元が受け取る結果は変わりません。
  • 変更。 Rerequest Check Run は、実行の status を rerequested に設定するようになりました。これに伴い、この呼び出しでは実行自体の status や conclusion は変更されないとした 9 月 11 日 の記載は無効になります。実行の conclusion とタイミングは、置き換えられる前の試行の内容を引き続き示します。そのため、conclusion は status が completed の場合にのみ読み取ってください。所有元のアプリが応答するまで、List Check Runs For Suite および List Check Runs For Commit では、この実行は引き続き保留中として返されます。アプリが応答すると rerequestedAt もクリアされ、投稿されたステータスが保存されます。
  • 変更。 repository.check_run.rerequested のペイロードでは、checkRun.status が completed ではなく rerequested になりました。checkRun.conclusion とタイミングは、置き換えられる前の試行の内容を引き続き示します。移行方法は endpoint の場合と同じです。checkRun.status で分岐し、checkRun.conclusion は status が completed の場合にのみ読み取ってください。

プルリクエスト

  • 破壊的変更。 Create Pull Request と Update Pull Request は、既存のブランチを指していない base を拒否するようになりました。コミット SHA、タグ名、または存在しないブランチを指定すると InvalidArgument (HTTP 400) が返され、Origin が探索した完全修飾リファレンス名がエラーに示されます。これまでは、同じリクエストでもプルリクエストの作成やターゲットの変更が行われていました。しかし、このようなプルリクエストではマージリファレンスを準備できないため、CI にマージリファレンスが渡されることはなく、プルリクエストをマージすることもできませんでした。移行方法:ブランチ名を短縮形 (main) または完全修飾形 (refs/heads/main) で指定してください。また、base がコミット SHA またはタグになっている既存のプルリクエストについては、ターゲットを変更してください。

アプリ

  • 追加。 アプリを作成 は、名前空間が所有するアプリを登録します: POST /v1/origin/namespaces/{namespaceSlug}/apps。ボディには必須の displayName と publicKey(アプリが JWT の署名に使用する PEM SPKI 形式の Ed25519 公開鍵)に加え、任意で webhookUrl、events、description、websiteUrl、installationRedirectUris、defaultScopes を指定できます。アプリは非公開として作成されます。ウェブフック URL、イベントタイプ、リダイレクト URI、スコープのいずれかが無効な場合は InvalidArgument(HTTP 400)を返します。Cherri Code ユーザーの認証情報に namespace:apps:create が必要で、コストは 10 ポイントです。
  • 追加。 List Namespace Apps は、名前空間が所有するアプリを新しい順に一覧表示します: GET /v1/origin/namespaces/{namespaceSlug}/apps。各エントリに含まれるのは表示用のメタデータ(id、displayName、description)のみです。アプリのウェブフック設定を取得するには Get App を使用してください。namespace:apps:read が必要で、コストは 1 ポイントです。
  • 追加。 Get App は、ID で指定したアプリの設定をすべて返します: GET /v1/origin/apps/{appId}。これはパブリッシャーが管理目的で使用する読み取り操作です。アプリが自身の JWT で自分の情報を読み取る場合は、引き続き 認証済みアプリを取得 を使用します。app:settings:read が必要で、コストは 1 ポイントです。
  • 追加。 Update App は、アプリの設定を更新します: PATCH /v1/origin/apps/{appId}。displayName、webhookUrl、description、websiteUrl は通常のフィールドで、events、installationRedirectUris、defaultScopes はリスト全体を置き換えるラッパーです。省略したフィールドは変更されません。何も設定しないリクエストは InvalidArgument(HTTP 400)を返します。webhookUrl に空文字列を送信すると配信が無効になり、アプリの保留中の配信は完全にキャンセルされます。app:settings:write が必要で、コストは 5 ポイントです。
  • 追加。 Add App Signing Key は、アプリに Ed25519 公開鍵を追加で登録します: POST /v1/origin/apps/{appId}/signing_keys。レスポンスには、JWT のキー ID として使用する kid(鍵の SPKI DER エンコーディングの SHA-256 ダイジェストを base64url でエンコードしたもの)が含まれます。登録済みの鍵を指定すると AlreadyExists(HTTP 409 Conflict)を、アプリの有効な鍵の上限を超える場合は FailedPrecondition(HTTP 400)を返します。app:settings:write が必要で、コストは 5 ポイントです。
  • 追加。 Revoke App Signing Key は、署名キーを失効させて 204 No Content を返します: DELETE /v1/origin/apps/{appId}/signing_keys/{kid}。失効した鍵で署名されたアプリ JWT では認証できなくなります。最後の有効な鍵を失効させようとすると FailedPrecondition(HTTP 400)を返します。app:settings:write が必要で、コストは 5 ポイントです。
  • 追加。 アプリのレスポンスに、アプリを所有する名前空間の slug である namespaceSlug のほか、description、websiteUrl、defaultScopes が含まれるようになりました。これらは 認証済みアプリを取得、Get App、アプリを作成、Update App で返されます。

権限付与

  • 追加。 List Repository Grants は、リポジトリに対して直接付与された権限を持つユーザー、グループ、所有チームのグループを一覧表示します: GET /v1/origin/repos/{ownerSlug}/{repoName}/grants。リポジトリの所有者から継承された権限は含まれません。また、解決できなくなったプリンシパルは除外されるため、1 ページあたりの権限付与の数が pageSize を下回る場合があります。repository:settings:read が必要で、コストは 1 ポイントです。
  • 追加。 Upsert Repository Grant は、1 つのプリンシパルがリポジトリに対して直接持つ権限を設定します: POST /v1/origin/repos/{ownerSlug}/{repoName}/grants。本文では、user、group、teamGroup のいずれか 1 つと、read、write、admin のいずれかの permission を指定します。custom を指定すると InvalidArgument (HTTP 400) が返り、所有者のチームまたは組織に属さないプリンシパルを指定すると FailedPrecondition (HTTP 400) が返ります。プリンシパルがすでに持っている権限を再度付与した場合は、何も変更されずに成功します。repository:settings:write が必要で、コストは 5 ポイントです。
  • 追加。 Delete Repository Grant は、1 つのプリンシパルがリポジトリに対して直接持つ権限を削除し、204 No Content を返します: DELETE /v1/origin/repos/{ownerSlug}/{repoName}/grants。所有者から継承された権限には影響しないため、所有チームのグループには所有者レベルのデフォルト権限が適用されます。また、プリンシパルが直接持っていない権限を削除した場合は、何も変更されずに成功します。repository:settings:write が必要で、コストは 5 ポイントです。
  • 追加。 List Namespace Grants は、所有者へのアクセス権を付与されたユーザーなどを一覧表示します: GET /v1/origin/owners/{ownerSlug}/grants。各権限付与には、所有者配下のすべてのリポジトリに適用される権限が含まれます。admin の権限付与が先頭に表示され、個々のリポジトリに対する権限付与は含まれません。namespace:settings:read が必要で、コストは 1 ポイントです。
  • 追加。 Upsert Namespace Grant は、1 つのプリンシパルが所有者に対して直接持つ権限を設定します: POST /v1/origin/owners/{ownerSlug}/grants。permission には PERMISSION_READ、PERMISSION_CONTRIBUTOR、PERMISSION_WRITE、PERMISSION_ADMIN のいずれかを指定できます。PERMISSION_CUSTOM を指定すると InvalidArgument (HTTP 400) が返ります。所有チームまたはその組織に属さないプリンシパルを指定した場合や、書き込みによって所有者の admin がいなくなる場合は、FailedPrecondition (HTTP 400) が返ります。namespace:settings:write が必要で、コストは 5 ポイントです。
  • 追加。 Delete Namespace Grant は、1 つのプリンシパルが所有者に対して直接持つ権限を削除し、204 No Content を返します: DELETE /v1/origin/owners/{ownerSlug}/grants。リポジトリごとの権限付与には影響しません。削除によって所有者の admin がいなくなる場合は、FailedPrecondition (HTTP 400) が返ります。namespace:settings:write が必要で、コストは 5 ポイントです。

インストール

チェック実行

  • 破壊的変更。 repository.check_run.rerequested のペイロードには、トップレベルの rerequestedBy が含まれなくなりました。再実行を要求したプリンシパルは、代わりに埋め込まれたチェック実行の checkRun.rerequestedBy に格納されます。これは、ペイロードにリポジトリ、スイート、実行とともに要求者が含まれるとした 9 月 10 日の記載に代わるものです。移行方法:受信側でペイロード自体の rerequestedBy を読み取っていた箇所はすべて、checkRun.rerequestedBy を読み取るように変更してください。
  • 追加。 Rerequest Check Run は、チェック実行を報告したアプリに再実行を要求します。空の本文で POST /v1/origin/repos/{ownerSlug}/{repoName}/check-runs/{checkRunId}/rerequest を呼び出してください。対象の実行は、completed であること、isRerequestable を持つこと、その key における現在の試行であること、オープン中のプルリクエストの現在の HEAD 上にあることが条件です。いずれかを満たさない場合は FailedPrecondition (HTTP 400) が返り、未処理の要求がある間に再度要求すると AlreadyExists (HTTP 409 Conflict) が返ります。この呼び出しによって実行自体の status や conclusion が変わることはありません。repository:contents:write を持つプリンシパルであれば、報告元のアプリにかかわらず、再要求可能な任意の実行を再要求できます。この呼び出しの消費ポイントは 5 です。
  • 追加。 チェック実行に、再実行を要求したプリンシパルを示す rerequestedBy が追加されました。rerequestedAt が設定されている場合は常に存在し、rerequestedAt と同時にクリアされます。Get Check Run、List Check Runs For Suite、List Check Runs For Commit、Post Check Run、Batch Upsert Check Runs、Rerequest Check Run のレスポンスに含まれます。
  • 変更。 rerequestedAt は、一度きりのタイムスタンプではなく、未処理の再要求を示すようになりました。所有者であるアプリが同じ HEAD SHA と key に対して新しい実行を投稿して応答すると (新しい externalId による新規実行、または同じ externalId による再要求された実行の更新のいずれか) 、Origin はこの値をクリアし、以降は再び再要求できるようになります。これは、チェック実行の再要求は 1 回までとした 9 月 10 日の記載に代わるものです。このため、受信側では同じ実行について複数の repository.check_run.rerequested イベントを受け取る場合があります。再配信の重複排除は、引き続きイベント ID で行ってください。
  • 変更。 再要求されたチェック実行は、アプリが応答するまで List Check Runs For Suite と List Check Runs For Commit の一覧から除外されるのではなく、一覧に残り保留中として扱われるようになりました。このとき rerequestedAt は設定され、置き換えられる前の status と conclusion はそのまま保持されます。必須チェックは、存在しないチェックではなく保留中のチェックとしてマージをブロックします。これは、新しい試行が届くまで実行が一覧から除外されるとした 9 月 10 日の記載に代わるものです。

リポジトリ

  • 追加。 Update Repo はリポジトリ設定を書き込みます: PATCH /v1/origin/repos/{ownerSlug}/{repoName}。本文では任意の defaultBranch、allowMergeCommit、allowSquashMerge、deleteBranchOnMerge、visibility フィールドを指定でき、省略したフィールドは変更されません。allowMergeCommit と allowSquashMerge は必ず一緒に送信し、少なくとも一方を true にする必要があります。上流ソースから取り込むリポジトリでは、defaultBranch と deleteBranchOnMerge は FailedPrecondition (HTTP 400) を返します。また、何も設定しないリクエストは InvalidArgument (HTTP 400) を返します。各グループはアトミックではなく固定の順序で適用されるため、あるグループが拒否されても、それより前のグループは適用されたままになります。repository:settings:write が必要で、消費ポイントは 5 です。
  • 追加。 Transition Repo Mirror はミラー方向の変更を開始し、それを追跡するジョブを返します: POST /v1/origin/repos/{ownerSlug}/{repoName}/mirror:transition。本文では必須の transition に initial_to_inbound、inbound_to_outbound、outbound_to_inbound のいずれかを指定します。ジョブの実行中、リポジトリのミラーステータスは移行中になります。リポジトリが移行の想定開始状態にない場合、またはすでに有効なジョブがある場合は FailedPrecondition (HTTP 400) を返します。ミラーの上流ソース側でもリポジトリの管理権限を持つ Cherri Code ユーザーのクレデンシャルで repository:mirror:write が必要です。消費ポイントは 10 です。
  • 追加。 Force Repo Mirror Cutover は、差分のある状態を書き戻さずにリポジトリを上流ソースへ切り替えます: 空の本文で POST /v1/origin/repos/{ownerSlug}/{repoName}/mirror:forceCutover。ソースは現状のまま信頼できる情報源として採用され、Origin にのみ存在する ref はスナップショットを取ったうえで破棄されます。受け付けられるのは、outbound ステータスのリポジトリ、または outbound から inbound への移行が停止し、有効なジョブが requires_attention を報告しているリポジトリのみです。後者の場合、そのジョブは強制切り替えによって置き換えられます。repository:mirror:write が必要で、消費ポイントは 10 です。
  • 追加。 Detach Repo Mirror はミラーリポジトリを上流ソースから完全に切り離し、204 No Content を返します: DELETE /v1/origin/repos/{ownerSlug}/{repoName}/mirror。リポジトリの内容は保持されたままネイティブリポジトリになり、双方向の同期が停止し、ミラーのデプロイ用クレデンシャルは削除されます。デタッチ済みのリポジトリを再度デタッチしても何も変わらず成功しますが、一度もミラーが設定されていないリポジトリは FailedPrecondition (HTTP 400) を返します。repository:mirror:delete が必要で、消費ポイントは 5 です。
  • 追加。 Get Mirror Transition Job は ID を指定して移行ジョブを 1 件返します: GET /v1/origin/repos/{ownerSlug}/{repoName}/mirror/transition-jobs/{jobId}。ジョブは transition、status (queued、running、succeeded、failed_rolled_back、requires_attention、superseded のいずれか) 、attemptCount を報告し、失敗した場合は lastErrorCode と lastErrorMessage も報告します。phase 文字列は表示用の詳細情報で、移行処理の改善に伴い新しい値が追加される可能性があるため、完了を判定する際は phase の値を照合せず、status をポーリングしてください。repository:metadata:read が必要で、消費ポイントは 1 です。
  • 追加。 Get Active Mirror Transition Job は、リポジトリの進行中の移行ジョブと、直近に終了したジョブを返します: GET /v1/origin/repos/{ownerSlug}/{repoName}/mirror/transition-jobs:active。activeJob と lastJob はどちらも任意のため、一度も移行したことのないリポジトリでは空のオブジェクトが返ります。activeJob がなくなるまでポーリングしてから lastJob を読み取ることで、完了した移行と一度も実行されなかった移行を区別できます。repository:metadata:read が必要で、消費ポイントは 1 です。
  • 変更。 ミラー状態の endpoint リファレンスは Origin Migration API に移動しました。HTTP コントラクトに変更はありません。以前の Origin API のアンカーからは新しいリファレンスにリンクされます。
  • 追加。 Merge Pull Request で、オプションの mergeMethod に merge または squash を指定できるようになりました。プルリクエストをマージコミットとして取り込むか、単一のスカッシュコミットとして取り込むかを選択できます。リポジトリで許可されていない方式は FailedPrecondition (HTTP 400) で、rebase を含むそれ以外の値は InvalidArgument (HTTP 400) で拒否されます。省略した場合は従来の動作になります。リポジトリでマージコミットが許可されていればマージコミット、許可されていなければスカッシュとなり、ベースブランチで直線的な履歴が必須の場合はスカッシュになります。
  • 追加。 リポジトリのペイロードに、値が internal または private の visibility と、ブール値の allowMergeCommit、allowSquashMerge、deleteBranchOnMerge が含まれるようになりました。これら4つはいずれも参照専用で、Get Repo、Create Repo、List Repos、List App Installation Repositories で返されます。
  • 追加。 チェック実行に、報告元アプリがその実行を再実行可能であると宣言する isRerequestable と、再リクエストのタイムスタンプを示す rerequestedAt が含まれるようになりました。isRerequestable は Post Check Run と Batch Upsert Check Runs で送信します。両フィールドはこれらのレスポンスのほか、Get Check Run、List Check Runs For Suite、List Check Runs For Commit でも返されます。実行を再リクエスト可能と宣言した場合、アプリは再リクエストのたびに、同じ head SHA と key で新しい実行を投稿して応答する必要があります。
  • 追加。 完了したチェック実行が再リクエストされると、repository.check_run.rerequested が配信されます。このイベントは、リポジトリの全購読者ではなく、その実行を所有するアプリにのみ届きます。ペイロードにはリポジトリ、チェック スイート、スタンプ済みのチェック実行、rerequestedBy が含まれます。プルリクエストのコンテキストは含まれないため、プルリクエストは checkRun.sha から特定してください。購読には repository:checks:read が必要です。チェック実行の再リクエストは1回までのため、再配信はイベント ID で重複排除してください。
  • 追加。 OpenAPI specification 内のすべての webhook のペイロードのスキーマに、配信されるイベントを示す x-origin-webhook-events 拡張と、スキーマの example として厳選したサンプルペイロードが追加されました。また、新しい Event payloads リファレンスでは、これらのスキーマから生成した各ペイロードのフィールドとサンプルペイロードを、エンドポイントリファレンスと同じレイアウトで掲載しています。
  • 変更。 再リクエストされたチェック実行は、所有するアプリが新しい試行を投稿するか、より新しい externalUpdatedAt で既存の実行を更新するまで、List Check Runs For Suite と List Check Runs For Commit の結果から除外されます。そのため、再リクエストが未処理の間は必須チェックが欠落しているものとみなされ、マージがブロックされます。除外された実行は、その ID を指定して Get Check Run で取得できます。
  • 破壊的変更。 Create Pull Request Comment および Create Pull Request Review で、行範囲がファイルの末尾を超える inline アンカーは InvalidArgument (HTTP 400) で拒否されるようになりました。範囲は引き続き diff のハンク内に限定されませんが、アンカー側のファイルの内容に対してチェックされます。left は base コミット時点、right は head 時点のファイルを参照します。エラーにはファイルの行数が含まれます。レビューでは、範囲外のアンカーが 1 つでもあるとリクエスト全体が失敗し、何も公開されません。移行方法:書き込む前に、inline.startLine と inline.endLine をアンカー側の行数以内に収めてください。アンカーが diff のハンク外にある場合は、Get Contents で行数を取得してください。
  • 追加。 Create Git Ref は、既存のコミットを起点にブランチを作成します: POST /v1/origin/repos/{ownerSlug}/{repoName}/git/refs。ref には refs/heads/<branch> または heads/<branch> を、sha にはリポジトリ内のコミットの完全な 16 進数 SHA を指定します。タグやその他のリファレンス名前空間を指定すると InvalidArgument (HTTP 400) が返されます。すでに sha を指しているブランチを作成しようとした場合は既存のリファレンスが返され、ブランチが別のコミットを指している場合は AlreadyExists (HTTP 409 Conflict) が返されます。repository:contents:write が必要で、コストは 5 ポイントです。
  • 追加。 Create Commit From Files は、インラインで指定したファイル変更をブランチにコミットし、ブランチを進めます: POST /v1/origin/repos/{ownerSlug}/{repoName}/git/commits:createFromFiles。各 files[] エントリには、content (encoding に utf-8 または base64、mode に file、executable、symlink のいずれかを指定) と delete のどちらか一方のみを設定します。また、expectedHeadSha はブランチの先端と一致している必要があり、その先端が新しいコミットの親になります。レスポンスでは sha、treeSha、previousHeadSha が返されます。1 回のリクエストで扱えるのは、ファイル変更が最大 1,000 件、1 ファイルあたり 8 MiB まで、コンテンツの合計が 32 MiB までです。repository:contents:write が必要で、コストは 10 ポイントです。
  • 変更。 ウェブフックの配信で、失敗した送信の再試行回数が 6 回から 7 回に増え、最初の再試行が失敗から 30 秒後ではなく 5 秒後に行われるようになりました。再試行の間隔は順に 5 秒、30 秒、1 分、2 分、4 分、8 分です。そのため、受信側が停止し続けている場合、ほぼ同じ約 16 分間のウィンドウ内で受け取る POST が 1 回増えます。追加された試行も、他の試行と同様に webhook-id で重複排除してください。
  • 破壊的変更。 アプリのメタデータに slug が含まれなくなりました。認証済みアプリを取得 のレスポンス、チェック・プルリクエスト・レビュー・コメントの各操作が返すすべてのアプリ actor (actor.app、author.app、dismissal.dismissedBy.app) 、5 つの installation.* webhook のペイロードに含まれる app オブジェクト、および Ping Webhook のペイロードから削除されています。これに伴い、アプリ actor は id と slug に加えて displayName を持つとした 9月2日 の記載は無効になります。これまでアプリ actor には slug が必ず含まれていましたが、今後含まれるのは id と省略可能な displayName のみです。移行方法:連携で slug を読み取っていた箇所では、アプリの指定には id を、表示名には displayName を使用してください。
  • 追加。 List Pull Request Comments で、省略可能なクエリパラメータ threadIds を指定できるようになりました。一覧を指定したスレッド内のコメントのみに絞り込めるため、プルリクエストのコメント履歴全体をページングしなくても 1 つのスレッドを読み取れます。重複は無視されるため、上限の 20 件は重複を除いた ID 数に適用されます。上限を超えるリストや空の ID を指定すると InvalidArgument (HTTP 400) が返されます。ページトークンには発行時の ID セットが埋め込まれているため、フィルターを変更した場合はページネーションを最初からやり直してください。
  • 変更。 List Pull Requests の author フィルターで、従来の user_…、app_…、sa_… の actor ID に加えて、ユーザーのメールアドレスも指定できるようになりました (完全一致、大文字・小文字は区別しません) 。どのユーザーにも一意に解決できないメールアドレスを指定した場合は、エラーではなく空のリストが返されます (従来はメールアドレスを指定すると InvalidArgument (HTTP 400) が返されていました) 。アプリとサービスアカウントにはメールアドレスによる ID がないため、この方法で指定できるのはユーザーの作成者のみです。なお、これらのレスポンスで返される ID は引き続き actor ID です。
  • 追加。 List Check Runs For Commit で、オプションの checkName および status クエリパラメータを指定できるようになりました。checkName はチェック実行の name と完全一致で照合されます。status には queued、in_progress、completed のいずれかを指定でき、それ以外の値を指定すると InvalidArgument (HTTP 400) が返されます。どちらのフィルターも最新試行への集約後に適用されます。そのため、チェック実行は最新試行のステータスで照合され、置き換え済みの試行がフィルターによって再び表示されることはありません。ページトークンには発行時のフィルターが埋め込まれるため、フィルターを変更した場合はページネーションを最初からやり直してください。
  • 追加。 List Pull Request Comments で、オプションの since および until クエリパラメータを指定できるようになりました。これらはコメント作成日時の範囲 (境界値を含む) を、2026-08-01T00:00:00Z のような RFC 3339 形式のタイムスタンプで指定します。不正な形式のタイムスタンプを指定すると InvalidArgument (HTTP 400) が返されます。ページトークンには発行時の範囲が埋め込まれるため、範囲を変更した場合はページネーションを最初からやり直してください。新しいコメントを追跡する際は、プルリクエストのコメント履歴全体をページングし直す代わりに since を使用してください。
  • 変更。 必要なスコープがインストール時の付与ではなく認証情報自体に含まれる操作について、公開されている OpenAPI 仕様 の x-origin-scopes 拡張に ambient: true が設定されるようになりました。このフラグが付いた操作は 9 件で、認証済みアプリを取得、インストールアクセストークンを作成、List App Installation Repositories などが該当します。スコープ文字列は引き続き拡張内に保持されるため、403 レスポンスには従来どおりスコープ名が表示されます。リクエストの処理に変更はありません。このフラグを参照すれば、認証だけで利用できる操作と、インストール時に承認されたスコープが必要な操作を見分けられます。
  • 破壊的変更。 List Check Suites For Commit、List Check Runs For Commit、List Check Runs For Suite は、各チェックの最新の試行のみを返し、置き換えられた試行を除外するようになりました。これは、マージゲートおよびプロダクトの CI ビューですでに表示されていた内容と一致します。チェック スイートは報告元の actor とスイートキーごとに最新の試行に集約され、チェック実行はスイート内の実行キーごとに最新の試行に集約されます。そのため、失敗した実行とその成功した再試行が両方表示されることはなくなりました。totalSize とページトークンは集約後のセットを基準にカウントされます。移行方法:置き換えられた試行は、その試行自体の id を使用して Get Check Run または Get Check Suite で読み取ってください。これらでは引き続き、保存されているすべての試行を参照できます。
  • 追加。 Create Pull Request Comment が file アンカーを受け付けるようになりました。これにより、プルリクエストバージョンの diff 内のファイル全体に対してコメントスレッドを作成できます。指定するのは file.path のみです。Origin がファイルの変更種別からサイドを判定し (削除されたファイルの場合はベースバージョン、それ以外は head バージョン) 、thread.side で返します。削除の場合は削除されたパスを、それ以外の変更では head のパスを送信してください。diff に含まれないパスや、リネームされたファイルのリネーム前のパスを指定すると InvalidArgument (HTTP 400) が返されます。file、inline、threadId は同時に指定できません。Create Pull Request Review でも、同じアンカーを comments[].file として指定できます。
  • 追加。 公開ユーザーの actor に、id と email に加えて displayName と handle が含まれるようになりました。displayName はアカウントの名と姓をスペースで連結したもので、プロダクトで表示される名前と同じです。アカウントに名前が設定されていない場合は省略されます。handle は取得済みのプロファイルハンドルで、@ プレフィックスは付きません。そのプロファイルが公開されている間のみ含まれます。どちらも、プルリクエストやコメントの作成者、チェック実行やスイートの actor、レビューの却下、レビュー依頼先、インストールの installedBy、および対応する webhook のペイロードなど、ユーザーの actor が含まれるすべての箇所に含まれます。インストールレシート には displayName が含まれますが、handle は含まれません。
  • 追加。 公開アプリの actor に、id と slug に加えてアプリの登録済み displayName が含まれるようになりました。5 つの installation.* webhook のペイロードに含まれる app オブジェクトにも同様に含まれます。アプリを解決できない場合や、Cherri Code のファーストパーティ管理 actor の場合は省略されます。
  • 変更。 :write スコープを要求すると、対応する :read スコープも付与されるようになりました。たとえば、repository:labels:write を要求するインストールには repository:labels:read もあわせて付与されます。これは、アプリのインストール時、インストールのプレビュー時、およびインストールアクセストークンがスコープを絞り込む際に適用されます。また、既存の書き込み専用の認証情報でも、対応する読み取りが許可されるようになりました。なお、読み取りスコープで書き込みが許可されることはありません。
  • 追加。 repository.deleted は、リポジトリが削除されたときに配信されます。製品上でネイティブまたはアウトバウンドのリポジトリを削除した場合と、inbound mirror の同期を停止した場合の両方が対象です。削除されたリポジトリは API で解決できなくなるため、ペイロードにはスナップショットではなく、repository の参照と deletedAt が含まれます。購読には repository:metadata:read が必要です。repository.pushed とは異なり、このイベントは GitHub からミラーされたリポジトリにも配信されます。同期を停止しても削除されるのは Cherri Code 側のリポジトリのみで、GitHub からは何も送信されないためです。削除済みのリポジトリを再度削除しても、イベントは送信されません。
  • 追加。 repository.metadata.updated は、リポジトリのデフォルトブランチが変更されたときに配信されます。設定や API による書き込み、アップストリームでの名前変更に追従する inbound mirror、初回プッシュ時の trunk の reconciliation が対象です。ペイロードには書き込み後の repository の完全なスナップショットが含まれますが、差分や更新を行ったアクターは含まれません。何が変わったかを確認するには、連続するスナップショットを比較するか、リポジトリを再取得してください。購読には repository:metadata:read が必要です。
  • 追加。 レビュー依頼先のユーザーに、id に加えて email が含まれるようになりました。List Pull Request Requested Reviewers、Request Pull Request Reviewers、および pull_request.reviewer.added、pull_request.reviewer.removed、pull_request.reviewer.rerequested の各ウェブフックの reviewer.user エントリに含まれます。値はアカウントのメールアドレスで、アカウントにメールアドレスが設定されていない場合は空になります。これまでこれらの箇所では、ユーザーを id のみで識別していました。
  • 変更。 REST レスポンスで、デフォルト値のフィールドが省略されずに含まれるようになりました。false のブール値、0 の数値、空文字列、空配列も、すべてのレスポンス本文に含まれます。たとえば プルリクエストを取得 で取得したドラフトではないプルリクエストでは draft が省略されずに false として返され、空のリストは省略されずに [] として返されます。submitted_at や dismissal など、コントラクトでオプションとされているフィールドは、未設定の場合は引き続き省略されます。キーの欠落をデフォルト値として扱っていた箇所では、値そのものを読み取るように変更してください。これは webhook のペイロードの従来のシリアル化方法と同じです。
  • 変更。 公開されている OpenAPI specification の各操作に、一意の operationId が付与されるようになりました。1 つの操作が 2 つの URL 形式に対応する場合、2 つ目の形式には _2 サフィックスが付きます。GET …/tarball/{ref} には OriginService_GetRepoTarball_2、GET …/git/matching-refs には OriginService_ListMatchingGitRefs_2 が使用されます。URL 形式とリクエストの処理はいずれも変更されていません。仕様から生成したクライアントは、名前が変更されたメソッドを反映するために再生成してください。
  • 変更。 installation.updated は、オーナーの namespace の名前が変更されたときにも配信されるようになりました。namespace が保持しているインストールごとに 1 回ずつ配信されます。イベントには、新しい namespace のスラッグと、そのインストールの現在のスコープおよびリポジトリの選択設定が含まれます。
  • 変更。 公開されている OpenAPI 仕様のすべての操作に x-origin-scopes 拡張が追加され、各操作に必要なスコープと、受け入れる認証情報が示されるようになりました。scopes には必須スコープが、tokenTypes には受け入れる認証情報の種類が格納されます。種類は、アプリ JWT を表す app、インストールアクセストークンを表す installation、ユーザー認証情報を表す user です。操作が受け付けない認証情報の種類は tokenTypes に含まれません。なお、スコープが不要な操作は レート制限の取得 のみです。また、この拡張の追加に伴い、ラベルの作成、ラベルの更新、ラベルの削除 の説明にあったスコープに関する記述は削除されました。認可の仕組みに変更はありません。この拡張は、Origin が従来から適用していたスコープを公開するものです。
  • 追加。 List Pull Request Requested Reviewers は、プルリクエストでレビューが未完了のユーザーとグループを返します: GET /v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/requested_reviewers。ユーザーへの直接の依頼はそのユーザーがレビューを送信するとクリアされ、グループへの依頼はそのグループの現在のメンバーのいずれかが送信するとクリアされます。未送信の下書きレビューの場合、依頼は保留中のままです。レビュアーは ID として返されます。読み取りには repository:pull_requests:reviews:read が必要です。
  • 追加。 Request Pull Request Reviewers は、ユーザーとグループにレビューを依頼し、依頼したレビュアーを返します: POST /v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/requested_reviewers。各レビュアーは公開 user_… ID、メールアドレス、grp_… ID、またはグループの slug で指定します。表示名では解決されません。不明または曖昧な識別子を指定すると InvalidArgument (HTTP 400) が返され、リポジトリのレビュアー候補ではないユーザーを指定すると PermissionDenied (HTTP 403) が返されます。依頼済みのレビュアーに再度依頼すると依頼が更新されるため、レビューを送信済みのレビュアーは再び保留中になります。repository:pull_requests:reviews:write が必要です。
  • 追加。 Remove Pull Request Requested Reviewers は、未完了のレビュー依頼を取り消し、空のボディで 204 を返します: DELETE /v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/requested_reviewers。現在依頼されていないレビュアーを削除しても何も起こりません。また、安定した公開 ID はレビュアーがリポジトリの候補リストから外れた後も解決されるため、古い依頼もクリアできます。repository:pull_requests:reviews:write が必要です。
  • 追加。 Update Pull Request Thread は、プルリクエストのコメントスレッドを解決または再オープンし、更新後の状態を返します: PATCH /v1/origin/repos/{ownerSlug}/{repoName}/pulls/threads/{threadId}。解決する場合は resolved に true、再オープンする場合は false を指定します。どちらの操作も冪等です。解決済みスレッドに返信しても再オープンはされず、別のリポジトリに属するスレッドを指定すると 404 が返されます。repository:pull_requests:reviews:write が必要です。
  • 追加。 プルリクエストコメントに、スレッド ID だけでなくスレッド全体が含まれるようになりました。thread には、コメント対象の version (head と base の SHA を含む)、スレッドの diff アンカーの path、side、startLine、endLine、resolvedAt、およびスレッド自体の createdAt と updatedAt が追加されました。これらは List Pull Request Comments、Get Pull Request Comment、Update Pull Request Comment で返されます。thread.id は変更されていないため、この値によるコメントのグループ化は引き続き機能します。
  • 追加。 Create Pull Request Comment が inline アンカーに対応しました。inline は path、side、startLine、および省略可能な endLine で構成され、プルリクエストのバージョンの diff 上に行単位のスレッドを作成します。あわせて、対象バージョンを指定する versionNumber も指定できます (デフォルトは呼び出し時点の最新バージョン)。path はそのバージョンの diff に含まれている必要があり、side にはファイルのコンテンツが存在する側を指定します。diff ハンク内の行に限らず、変更されたファイルの任意の行にアンカーできます。無効なアンカーを指定すると、一般ディスカッションのコメントにフォールバックせず InvalidArgument (HTTP 400) が返されます。inline と threadId、および threadId と versionNumber は同時に指定できません。
  • 追加。 Create Pull Request Review が comments 配列 (1 リクエストあたり最大 50 件) を受け付けるようになりました。これにより、レビューとそのコメントを 1 回のアトミックな呼び出しでまとめて公開できます。各エントリには body に加えて、Create Pull Request Comment と同じターゲットを指定します。指定できるのは、審査対象バージョンの diff 上の inline アンカー、threadId による返信のいずれかです。どちらも指定しない場合は、新しい一般ディスカッションスレッドが作成されます。すべてのアンカーは書き込み前に検証されるため、不正なアンカーが 1 つでもあるとリクエスト全体が InvalidArgument (HTTP 400) で失敗し、何も公開されません。この操作には冪等性キーがないため、成否が不明な失敗が発生した場合は、再試行する前に List Pull Request Reviews で状態を確認してください。comments を含まないリクエストの動作は従来どおりです。
  • 追加。 pull_request.comment.created で、スレッドを開始したコメントにそのスレッドの diff アンカーが含まれるようになりました。これにより、受信側は追加の読み取りを行わずにスレッドを構築できます。comment.thread には、コメント対象の version、path、side、startLine、endLine が含まれます。返信には comment.thread.id のみが含まれ、解決状態はイベントに含まれません。Create Pull Request Review でレビューとともに登録されたコメントは、レビューが送信されるまでイベントを発行しません。送信後は、コメントごとに個別のイベントが発行されます。
  • 追加。 Get Repo Tarball は、リポジトリツリーを gzip 圧縮した tar としてダウンロードします: GET /v1/origin/repos/{ownerSlug}/{repoName}/tarball/{ref}。解決されたコミットに対する最初のリクエストでは、レスポンス本文として application/gzip がストリーミングされます。同じコミットに対する以降のリクエストでは、Location に署名付きダウンロード URL を含む 302 が返されます。この URL の有効期間は 15 分です。アーカイブのエントリはラップ用ディレクトリなしで tar のルートに配置されます。空のリポジトリでは ABORTED (HTTP 409 Conflict) が返されます。アーカイブのダウンロードには repository:contents:read が必要です。
  • 追加。 List Comparison Files は、比較で変更されたファイル (base と head のマージベースに対する head の差分) を一覧表示します: GET /v1/origin/repos/{ownerSlug}/{repoName}/compare/{basehead}/files。結果はページ分割され、1 ページあたりデフォルトで 30 ファイル、最大 100 ファイルです。各ファイルは List Commit Files が返すものと同じ形式です。identical または behind の比較では空のリストが返され、関連のない履歴では 404 が返されます。ページ分割の途中で比較対象のコミットが移動した場合、ページトークンは InvalidArgument (HTTP 400) で拒否されるため、一覧表示を最初のページからやり直してください。比較ファイルの読み取りには repository:contents:read が必要です。
  • 追加。 署名鍵エンドポイント は Cache-Control: public, max-age=600, stale-if-error=600 を送信します。キャッシュした JWKS は 10 分間再利用し、その後更新してください。更新に失敗した場合は、最後に正常に取得した鍵を最大でさらに 10 分間保持し、それを過ぎたら検証を失敗させてください。有効な鍵で検証できない署名を受け取った場合も更新し、廃止された鍵 ID が除外されるようにしてください。
  • 変更。 deadlineAt を過ぎてもまだ in_progress のチェック実行は、timed_out の結論で完了し、repository.check_run.completed を配信するようになりました。これは、期限によって実行のステータスは変わらないとした 8月27日 の記載に代わるものです。期限切れの処理は実行ごとのタイマーではなく定期的な一括処理で行われるため、実行が期限を過ぎたまま一時的に残ることがあります。queued の実行や、deadlineAt を持たない実行は期限切れになりません。また、Origin は実行の externalUpdatedAt を変更しないため、後からプロバイダーが完了を送信すれば timed_out の結論を上書きできます。
  • 変更。 Origin が GitHub からミラーしているリポジトリでは、repository.pushed が配信されなくなりました。これらのプッシュは GitHub が管理しており、GitHub 自身がプッシュのウェブフックを送信するため、Origin からの配信は重複していました。ネイティブの Origin リポジトリおよび送信側ミラーへのプッシュはこれまでどおり配信されます。ミラーの状態は他のイベントには影響しません。
  • 変更。 Create Pull Request は、base と共通の履歴を持たない head を、基になる比較が返していた 404 ではなく InvalidArgument (HTTP 400) で拒否し、何も作成しないようになりました。
  • 変更。 プッシュによって、オープン中のプルリクエストの head が base と共通の履歴を持たなくなった場合、そのプルリクエストはクローズされ、pull_request.closed が配信されます。その後に関連するプッシュが行われても、再オープンされません。
  • 変更。 OpenAPI 仕様 では、すべての操作に一律で 400、401、403、429 を記載するのをやめ、各操作が返しうるレスポンスコードを個別に記載するようになりました。パラメーター付きのすべてのパスには 404、ハンドラーが競合を報告する箇所には 409、Batch Redeliver Webhook Deliveries と Sync Mirror には 202 が記載され、Get Rate Limit と 認証済みアプリを取得 ではより少ないコードのみが記載されます。Status スキーマでは Origin が返すエラーエンベロープについて説明しており、404 では存在しないリソースとアクセスできないリソースが区別されない点も明記しています。また、すべての操作にリクエストとレスポンスの例が含まれるようになりました。リクエストの処理に変更はありません。新しいレスポンスモデルを反映するには、仕様から生成したクライアントを再生成してください。
  • 追加。 チェック実行で、オプションの deadlineAt タイムスタンプを受け入れ、返すようになりました。Post Check Run または Batch Upsert Check Runs で実行の本文に含めて送信し、Get Check Run、List Check Runs For Suite、List Check Runs For Commit で読み取れます。Origin は、実行が completed に達すると期限をクリアします。更新時にこのフィールドを省略した場合、保存済みの値は変更されません。また、24 時間より先の期限は、上限値に丸めずに InvalidArgument (HTTP 400) で拒否します。期限を過ぎても、実行のステータスは変わりません。
  • 変更。 公開中の OpenAPI 仕様 で、サーバーとして https://api.cursor.com を、セキュリティスキームとして HTTP bearer 方式の bearerAuth を宣言するようになりました。これにより、このドキュメントから生成したクライアントは、ベース URL と Authorization: Bearer の要件を自動的に検出します。
  • 変更。 OpenAPI のパスパラメータ名を、URL で既に使われている名前に合わせました。リポジトリ単位の 55 個すべての操作で、生成されていた identifier.ownerSlug と identifier.name のバインディングが ownerSlug と repoName に変わりました。これにより、標準的な OpenAPI ジェネレーターでこのドキュメントを扱えるようになります。リクエスト URL とリクエストの挙動に変更はありません。新しいパラメータ名を反映するには、仕様から生成したクライアントを再生成してください。
  • 変更。 公開中の列挙型から、*_UNSPECIFIED のゼロ値エントリを削除しました (例: Create Ruleset の RULESET_ENFORCEMENT_UNSPECIFIED、Create Pull Request Review の PULL_REQUEST_REVIEW_VERDICT_UNSPECIFIED) 。Origin はこれらの値をこれまで一度も受け入れておらず、返してもいないため、リクエストとレスポンスに変更はありません。
  • 変更。 仕様内のすべての操作で、包括的な default レスポンスのみを記載する代わりに、google.rpc.Status 本文を含む 400、401、403、429 レスポンスを記載するようになりました。本文の形式とステータスの一覧は エラー を参照してください。
  • 破壊的変更。 pull_request.reviewer.added、pull_request.reviewer.removed、pull_request.reviewer.rerequested のレビュアーwebhook のペイロードでは、reviewer.kind と reviewer.id の組み合わせが型付きのレビュアーに置き換わり、reviewer.user と reviewer.group のどちらか一方のみが含まれるようになりました。移行方法: reviewer.kind が user のときに reviewer.id を読み取っていた箇所では reviewer.user.id を、reviewer.kind が group だった箇所では reviewer.group.id を読み取ってください。
  • 追加。 List Labels は、リポジトリが所有するラベル定義を名前順で返します: GET /v1/origin/repos/{ownerSlug}/{repoName}/labels。ラベルの読み取りには新しい repository:labels:read スコープが必要です。結果はページネーション対応で、1 ページあたりデフォルト 30 件、最大 100 件です。
  • 追加。 Create Label は、リポジトリにラベルを定義し、そのラベルを返します: POST /v1/origin/repos/{ownerSlug}/{repoName}/labels。ラベルの書き込みにはすべて新しい repository:labels:write スコープが必要です。name は最大 50 文字、description は最大 255 文字で、color は先頭に # を付けない 6 桁の 16 進数で指定する必要があります。リポジトリ内の別のラベルですでに使用されている名前は AlreadyExists (HTTP 409 Conflict) で拒否されます。
  • 追加。 Get Label は、名前を指定してリポジトリラベルを 1 件返します: GET /v1/origin/repos/{ownerSlug}/{repoName}/labels/{labelName}。存在しない名前を指定すると 404 を返します。
  • 追加。 Delete Label は、名前を指定してリポジトリラベルを削除し、204 を返します: DELETE /v1/origin/repos/{ownerSlug}/{repoName}/labels/{labelName}。ラベルを削除すると、そのラベルが付与されていたすべてのプルリクエストからも削除されます。
  • 追加。 Update Label は、現在の名前でラベルを指定し、名前、色、説明を変更します: PATCH /v1/origin/repos/{ownerSlug}/{repoName}/labels/{labelName}。省略したフィールドは変更されません。別のラベルですでに使用されている名前への変更は AlreadyExists (HTTP 409 Conflict) で拒否されます。
  • 追加。 List Check Run Annotations は、チェック実行のアノテーションを ID の昇順 (作成順と同じ) で返します: GET /v1/origin/repos/{ownerSlug}/{repoName}/check-runs/{checkRunId}/annotations。読み取りには repository:checks:read が必要です。結果はページネーション対応で、1 ページあたりデフォルト 30 件、最大 100 件です。
  • 追加。 Create Check Run Annotations は、1〜25 件のアノテーションを 1 回のアトミックなバッチでチェック実行に追記し、追記したアノテーションを返します: POST /v1/origin/repos/{ownerSlug}/{repoName}/check-runs/{checkRunId}/annotations。追記には repository:checks:write が必要です。1 つのチェック実行に保持できるアノテーションは最大 100 件で、上限を超えるバッチは何も書き込まれずに ResourceExhausted (HTTP 429) で拒否されます。この操作は追記専用で冪等ではないため、成否が不明な失敗の後に再試行すると、重複して追記される可能性があります。
  • 追加。 List Pull Requests に 5 つのクエリパラメータが追加されました。author は公開アクター ID で、レスポンスの pullRequests[].author.user.id、pullRequests[].author.app.id、pullRequests[].author.serviceAccount.id に返される値をそのまま指定します。base はベースブランチの完全一致フィルターで、短い名前と完全修飾 ref のどちらも指定できます。direction は新しい順の desc (デフォルト) または古い順の asc です。since と until は作成日時の範囲を RFC 3339 形式で指定します (境界値を含む) 。プルリクエストのない作成者を指定すると空のリストが返され、それ以外の無効な値を指定すると InvalidArgument (HTTP 400) が返されます。
  • 追加。 pull_request.review.dismissed は、送信済みレビューが明示的に却下された場合、または新しい判定で置き換えられた場合に配信されます。pull_request.review.submitted と同じペイロード構造を持ち、review.dismissal が設定されます。このイベントを購読するには repository:pull_requests:reviews:read が必要です。
  • 追加。 インストール情報に、アプリをインストールしたユーザーが含まれるようになりました。installedBy には、そのユーザーの公開 user_… ID とメールアドレスが含まれます。このフィールドは アプリのインストールを取得および List App Installations から返され、すべての installation.* ウェブフックのスナップショットにも含まれます。スナップショットでは最初にインストールしたユーザーを示し、そのユーザーレコードを読み取れなくなった場合は省略されます。インストールレシートには、そのインストールまたは再同意を行ったユーザーを示す installedBy クレームが追加されます。そのため、再同意後は両者が異なる場合があります。
  • 追加。 Ping Webhook は、アプリに設定されたウェブフック URL にテスト配信を送信し、受信側の応答内容を報告します: POST /v1/origin/app/webhook/pings。この配信は本番環境の配信と同様に署名され、webhook-event-type は ping となり、どのインストールにも属しません。Origin は再試行なしで一度だけ送信し、この配信が List Webhook Deliveries に表示されることはありません。ウェブフック URL が設定されていないアプリは FailedPrecondition (HTTP 400) で拒否されます。
  • 追加。 エラーレスポンスにリクエスト ID が 2 か所で含まれるようになりました: X-Request-ID レスポンスヘッダーと、details 内の google.rpc.RequestInfo エントリです。Origin は、送信された x-request-id があればその値をそのまま返し、なければ新たに生成します。メッセージが不透明な内部エラーの場合でも、このエントリは必ず含まれます。詳しくは Errors を参照してください。
  • 変更。 Create Pull Request と Update Pull Request は、256 文字を超える title、または 65,536 文字を超える body を InvalidArgument (HTTP 400) で拒否するようになりました。以前は、これらの長さを超える値を指定すると内部エラーで失敗していました。どちらの上限も Unicode コードポイント単位でカウントされるため、絵文字などのアストラル文字は 1 文字として数えられます。
  • 変更。 Sync Mirror のレスポンスには常に synced (true または false) が含まれ、その値は HTTP ステータスと対応します: true の場合は 200、false の場合は 202 です。以前は false の場合にこのフィールドが省略されていたため、呼び出し側はフィールドがないことを false と解釈する必要がありました。
  • 変更。 /v1/origin 配下の存在しないパスへのリクエストや、既知のパスに誤ったメソッドを使用したリクエストに対して、汎用的なルーターの本文ではなく、ドキュメントに記載された エラーエンベロープ を返すようになりました。メッセージにはメソッドとパスが含まれ、クエリ文字列がそのまま返されることはありません。
  • 変更。 プルリクエストをマージすると、マージによって更新されるベースリファレンスに対して repository.pushed ウェブフックが配信されるようになりました。このプッシュは Origin 自身が行うため、イベントにプッシュ実行者は含まれません。以前は、マージによるベースリファレンスの更新は配信されていませんでした。
  • 変更。 プルリクエストコメントの作成とプルリクエストコメントの更新で、65,536文字を超える body が InvalidArgument (HTTP 400) で拒否されるようになりました。これまでは、この長さを超える本文を送信すると内部エラーで失敗していました。上限は Unicode コードポイント単位でカウントされるため、絵文字などのアストラル文字も1文字として扱われます。
  • 追加。 Delete Ruleset は、安定した Origin ID を指定してリポジトリのルールセットを削除し、204 を返します: DELETE /v1/origin/repos/{ownerSlug}/{repoName}/rulesets/{rulesetId}。repository:rulesets:write が必要です。別のリポジトリに保存されているルールセットは不明なルールセットとして扱われます。また、空の rulesetId は InvalidArgument(HTTP 400)で拒否されます。
  • 追加。 リポジトリ単位のすべての endpoint で、所有者と名前に加えて、安定した ID でもリポジトリを指定できるようになりました。GET /v1/origin/repos/_/REPO_ID のように、所有者の slug に _ を、リポジトリ名に ID を指定します。ID は Get Repo の id から取得できます。ID はリネーム後も変わりませんが、ID 自体に権限はありません。そのため、アプリには解決先のリポジトリに対する同じスコープが必要です。アクセスできない ID を指定した場合は、存在しない ID と同じく 404 が返されます。Create Repo は所有者の slug のみを受け付け、_ は拒否します。
  • 変更。 アプリからミラーリポジトリにアクセスできるようになりました。ミラーはインストールの対象として選択でき、List App Installation Repositories およびインストールの webhook のペイロード のリポジトリ配列に含まれます。また、インストールアクセストークンを作成 の repositoryIds で指定でき、Webhook 配信も受信します。ミラーは、安定したアウトバウンドミラーになるまでは参照専用です。適用されるのは repository:metadata:read と repository:contents:read のみで、それ以外のスコープはすべて、そのリポジトリに対して 403 を返します(git push も含む)。詳しくは ミラーリポジトリ を参照してください。
  • 破壊的変更。 Get Tree の recursive クエリパラメータは文字列ではなくブール値になりました。そのため、ツリー全体を走査するのは true と 1 の場合のみです。false、0、値なしの ?recursive を含むその他の値では、直下の子のみが一覧表示されます。移行方法: 空でない recursive 値であれば再帰が有効になる前提で実装していた箇所では、recursive=true を送信してください。
  • 破壊的変更。 プルリクエストのライフサイクル webhook のペイロード には、プルリクエストに割り当てられた labels が含まれなくなりました。これは 2026年8月20日 に告知したフィールドに代わる変更です。REST レスポンスには引き続き含まれます。移行方法: ウェブフックのスナップショットではなく、Get Pull Request または List Pull Requests からラベルを取得してください。
  • 追加。 List Rulesets は、リポジトリに設定されたすべてのルールセットと、共通の repository 参照を1つ返します: GET /v1/origin/repos/{ownerSlug}/{repoName}/rulesets。ルールセットは件数に上限がある設定のため、レスポンスはページネーションされません。ルールセットの読み取りには repository:rulesets:read が必要です。
  • 追加。 Create Ruleset は新しいルールセットを保存し、Origin が各ルールとバイパスアクターに割り当てた ID を付けて返します: POST /v1/origin/repos/{ownerSlug}/{repoName}/rulesets。ルールセットの書き込みエンドポイントにはいずれも repository:rulesets:write が必要です。
  • 追加。 Get Ruleset は、Origin が付与する固定 ID を指定して単一のルールセットを返します: GET /v1/origin/repos/{ownerSlug}/{repoName}/rulesets/{rulesetId}。
  • 追加。 Update Ruleset は、rules と bypassActors を含むルールセットの設定全体を置き換えます: PUT /v1/origin/repos/{ownerSlug}/{repoName}/rulesets/{rulesetId}。保存済みのエントリはマージされずに置き換えられるため、残したいルールとバイパスアクターをすべて送信してください。
  • 追加。 ルールセットには、id、name、description、enforcement(active、evaluate、disabled のいずれか)、kind(merge_branch、push_branch、push_tag、push_repository のいずれか)、glob と ~ALL・~DEFAULT_BRANCH トークンを指定できる includedRefNames と excludedRefNames のパターン、rules、bypassActors が含まれます。Create Ruleset と Update Ruleset では、1つのリストに64個を超えるパターン、20個を超えるルール、または15個を超えるバイパスアクターを指定すると InvalidArgument(HTTP 400)で拒否されます。
  • 追加。 Merge Pull Request で、省略可能な expectedHeadSha リクエストフィールドを指定できるようになりました。プルリクエストの head と一致する必要がある完全なコミット SHA を指定します。head が移動していた場合、マージは ABORTED(HTTP 409 Conflict)で拒否され、何もマージされません。完全なコミット SHA でない値は InvalidArgument(HTTP 400)で拒否されます。現在の head をそのままマージする場合は省略してください。
  • 追加。 所有者の参照に type 文字列(team または user)が含まれるようになりました。Origin が解決できない場合は省略されます。Get Repo、List Repos、List App Installations、およびチェックとプルリクエストのレスポンス内のリポジトリ参照など、owner またはインストールの target を含むすべての箇所で返されます。
  • 破壊的変更。 プルリクエストのラベル一覧は、付与されているすべてのラベルを1回のレスポンスで返すようになり、ページネーションは行われなくなりました。クエリパラメータ pageSize と pageToken、およびレスポンスフィールド nextPageToken は廃止されました。移行方法:リクエストから pageSize と pageToken を削除し、labels からすべてのラベルを読み取ってください。
  • 破壊的変更。 1つのプルリクエストに付与できるラベルは最大100個です。この上限を超える書き込みは、Add Pull Request Labels と Set Pull Request Labels によって FailedPrecondition (HTTP 400) で拒否されます。移行方法:各プルリクエストのラベル数を100個以下に保ち、上限に達している場合は既存のラベルを削除してから追加してください。
  • 追加。 プルリクエストに、付与されているラベルを格納する labels 配列が追加されました。ラベルは名前順に並び、付与されていない場合は空の配列になります。この配列は List Pull Requests、プルリクエストを取得、Create Pull Request、Update Pull Request、Merge Pull Request のレスポンスで返されるほか、プルリクエストのライフサイクルに関するwebhook のペイロードにも含まれます。
  • 追加。 プルリクエストのラベル一覧 は、プルリクエストに付与されたラベルを名前順で返します: GET /v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels。repository:pull_requests:read が必要です。結果はページネーション対応で、1ページあたりデフォルトで30件、最大100件です。
  • 追加。 プルリクエストのラベル追加 は、既存のリポジトリラベルをプルリクエストに付与します。すでに付与されているラベルはそのまま残ります: POST /v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels。ラベルを書き込むすべての endpoint には repository:pull_requests:write が必要です。
  • 追加。 プルリクエストのラベル設定 は、プルリクエストのラベルをすべて、送信した名前のラベルに置き換えます。空のリストを送信するとすべてのラベルが外れます: PUT /v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels。
  • 追加。 プルリクエストのラベル削除 は、名前を指定してラベルを1つ削除し、プルリクエストに残っているラベルを返します: DELETE /v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels/{labelName}。
  • 追加。 プルリクエストのラベル全削除 は、プルリクエストからすべてのラベルを削除し、204 を返します: DELETE /v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels。
  • 追加。 ラベルのエントリには、id、name、color (先頭に # を付けない6桁の16進値) 、および省略可能な description が含まれます。プルリクエストのラベル関連のすべての endpoint から返されます。
  • 変更。 アプリ JWT のレート制限 の上限が1分あたり600ポイントから6,000ポイントに引き上げられ、インストールアクセストークンを作成 の消費ポイントが5から1になりました。これにより、アプリは1秒あたり約100個のインストールトークンを発行できます。
  • 変更。 Create Repo および Git HTTPS 経由のプッシュを利用できる所有者の対象が拡大され、Pro、Pro+、Ultra に加えて Pro Student プランと Start プランも対象になりました。チーム所有者の要件に変更はありません。
  • 変更。 リポジトリパス 内の所有者 slug とリポジトリ名は大文字と小文字を区別せずに解決されるようになり、レスポンスには送信時の表記ではなく保存されている表記が返されます。Create Repo は、所有者の既存のリポジトリ名と大文字・小文字の違いしかない名前を拒否します。リポジトリ名は大文字と小文字を区別せずに比較してください。
  • 破壊的変更。 Git over HTTPS は、リポジトリの所有者が Origin への書き込み要件を満たしていない場合、プッシュを 403 で拒否します。所有者がユーザーの場合は、Pro、Pro+、または Ultra プランに加入している必要があります。所有者がチームの場合は、有効な有料チームプランに加入していること、プライバシーモード (Legacy) を使用していないこと、チーム管理者によって Origin が無効化されていないことが条件です。クローン、フェッチ、プルには影響しません。移行: プッシュ時の 403 は、リトライでは解消できない所有者の要件エラーとして処理してください。また、所有者に代わってプッシュする前に、その所有者のプランを確認してください。
  • 変更。 Create Repo で作成したリポジトリへの最初のプッシュがブランチの作成のみで、作成されたブランチのいずれも保存済みのデフォルトブランチでない場合、defaultBranch の設定先が変更されます。Origin は作成されたブランチを選択します。複数のブランチが作成され、その中に main または master が含まれる場合は、そのブランチを選択します。現在の値は Get Repo で取得できます。
  • 破壊的変更。 Create Repo は、所有者に Origin への書き込み資格がないリクエストを拒否し、FailedPrecondition (HTTP 400) を返すようになりました。所有者がユーザーの場合は、Pro、Pro+、または Ultra プランに加入している必要があります。所有者がチームの場合は、有効な有料チームプランに加入していること、プライバシーモード (Legacy) を使用していないこと、チーム管理者によって Origin が無効化されていないことが条件です。移行方法: Create Repo から返される 400 は、再試行しても解消されない所有者の資格エラーとして処理してください。また、所有者に代わってリポジトリを作成する前に、その所有者のプランを確認してください。
  • 破壊的変更。 オリジンが GitHub からミラーしているリポジトリに、アプリがアクセスできなくなりました。これらのリポジトリは List App Installation Repositories に表示されなくなり、インストールアクセストークンを作成 で repositoryIds に指定すると拒否されます。また、これらのリポジトリを指定したリクエストには、REST API と Git over HTTPS のいずれでも 403 が返されます。移行方法:保存済みのリポジトリ一覧を使う代わりに List App Installation Repositories からリポジトリを取得し、GitHub をソースとするリポジトリは Origin API ではなく GitHub から読み取ってください。
  • 破壊的変更。 オリジンは GitHub からミラーしているリポジトリについてウェブフックを送信しなくなりました。あわせて、インストールのイベントペイロードでは、選択済みリポジトリの配列と repositoriesCount からこれらのリポジトリが除外されます。移行方法:GitHub をソースとするリポジトリのイベントは GitHub から取得し、インストールペイロードのリポジトリ配列を、アプリがアクセス可能なリポジトリの一覧として扱ってください。
  • 破壊的変更。 Get Contents は、デコード後のサイズが 1 MiB を超えるファイルを FailedPrecondition (HTTP 400) で拒否するようになりました。また、サイズ超過のファイルが 1 つでも含まれると、Batch Get Contents リクエスト全体が失敗します。
  • 追加。 インストールアクセストークンを使用して Git over HTTPS の認証ができるようになりました。リポジトリの cloneUrl に対し、ユーザー名に x-access-token、HTTP Basic 認証のパスワードにトークンを指定します。クローン、フェッチ、プルには repository:contents:read が、プッシュには repository:contents:write が必要です。詳細は Git HTTPS 認証 を参照してください。
  • 変更。 List Repos、Get Repo、Create Repo、List App Installation Repositories、および repository.created の webhook のペイロードで、cloneUrl が従来の /git/ パスではなく、GitHub 形式のルートパス (https://origin.cursor.com/OWNER_SLUG/REPO_NAME.git) を返すようになりました。どちらの形式でもクローンでき、cloneUrl は特定のパス形式を保証していないため、保存済みの値は引き続き使用できます。
  • 変更。 Get Contents および Batch Get Contents のレスポンスに含まれる size は、base64 の content 文字列の長さではなく、デコード後のコンテンツサイズ (バイト単位) を示すようになりました。
  • 破壊的変更。 レビュアー関連のウェブフックのペイロードでは、reviewer.id に安定した外部 ID が入るようになりました。kind が user の場合は、プロバイダー固有の認証 ID に代わり、エンコード済みのユーザー ID (user_…、組織 API と同じ形式) が入ります。グループのレビュアーには、引き続きグループの公開 ID (grp_…) が入ります。対象は pull_request.reviewer.added、pull_request.reviewer.removed、pull_request.reviewer.rerequested です。移行方法:連携で reviewer.id を保存済みの認証 ID と比較していた箇所では、ユーザーのレビュアーをエンコード済みの user_… ID で照合してください。
  • 追加。 アプリで最大 10 個の有効な Ed25519 署名キーを保持できるようになりました。アプリ JWT の検証では、いずれかの有効なキーで署名されたトークンが受け入れられます。
  • 追加。 Sync Mirror は、ミラーリポジトリの ref を 1 つ上流ソースから同期します:POST /v1/origin/repos/{ownerSlug}/{repoName}:syncMirror。repository:contents:read が必要です。同期対象が満たされている場合は 200、同期が保留中の場合は 202 を返します。
  • 追加。 インストール後のリダイレクトに installation_receipt クエリパラメータが付与されるようになりました。これは Origin が署名した有効期間 5 分の JWT で、sub クレームでインストールを識別し、パブリッシャーが指定した state をそのままクレームとして含みます。コールバックを信頼する前に、公開されている JWKS で検証してください。詳細は インストールレシート を参照してください。
  • 削除。 Origin の actor オブジェクトから、トップレベルの kind および id フィールドが削除されました。これで、2026年8月5日 に告知した非推奨化が完了します。チェック、コミット、プルリクエストの各レスポンスに含まれるすべての actor、author、dismissedBy フィールドが対象です。移行方法:actor に設定されている user、app、serviceAccount のいずれかのバリアントを読み取ってください。
  • 追加。 レート制限の取得 (GET /v1/origin/rate_limit) を追加しました。ポイントを消費することなく、認証済みプリンシパルが共有する1分あたりのポイント予算を返します。詳しくはレート制限を参照してください。
  • 非推奨: OriginActor.kind および OriginActor.id。アクターの ID は、user、app、serviceAccount の各バリアントからなる判別共用体になりました。移行方法:トップレベルの kind と id ではなく、選択されたバリアントのフィールドを読み取ってください。