API
Origin API 変更履歴
Origin API は Early Beta 段階のため、変更される可能性があります。連携を更新する際は、OpenAPI仕様を確認してください。
エンドポイント、リクエストおよびレスポンスのスキーマ、スコープ、ウェブフックを含む Origin Public API の変更を、最新のものから日付順にまとめています。各変更には、破壊的変更、非推奨、追加、変更、削除のいずれか1つのラベルが付けられます。破壊的変更および非推奨の変更には、インラインで移行ガイダンスが含まれます。Origin API リファレンスには、常に最新の同期状態が反映されています。
- 変更。 List App Installation Repositories、List Branches、List Check Run Annotations、List Check Runs For Commit、List Check Runs For Suite、List Check Suites For Commit、List Commit Files、List Comparison Files、List Namespace Grants、List Namespaces、List Pull Request Files、List Pull Requests、List Repos、List Repository Grants で、
pageTokenとともに送信されたpageSizeがそのページに適用され、後続のリクエストでpageSizeが省略された場合は前回のページサイズが引き継がれるようになりました。List Commit Files と List Comparison Files は、後続のリクエストで最初のリクエストと異なるpageSizeが指定されてもInvalidArgument(HTTP 400) で拒否しなくなりました。また、その他のエンドポイントでも、この値が無視されなくなりました。リポジトリ、フィルター、プルリクエストのバージョンなど、ページトークンに紐づくその他の値は、引き続き一致させる必要があります。
- 変更。 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 は、保存済みの実行とoutcomeignored_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である OpenSSHauthorized_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 ポイントです。
インストール
- 追加。 インストールに
suspendedAtとdeletedAtが含まれるようになりました。suspendedAtはインストールの一時停止中に設定され、有効な間は省略されます。deletedAtはinstallation.deletedウェブフックのスナップショットにのみ含まれます。これらは アプリのインストールを取得 と アプリのインストール一覧を取得 で返されます。 - 追加。 5 つの
installation.*ペイロードにinstallation.appIdが含まれるようになりました。値はペイロード自体のapp.idと同じです。また、installation.createdとinstallation.updatedにはinstallation.updatedAtも含まれます。アプリのインストールを取得 が返すインストールのフィールドはすべて、同じ名前と型でスナップショットにも含まれるため、1 つのデコーダーで両方を読み取れます。
チェック実行
- 破壊的変更。
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 から取得し、インストールペイロードのリポジトリ配列を、アプリがアクセス可能なリポジトリの一覧として扱ってください。
- 変更。 リビジョンを指定するパラメータで、SHA、ブランチ、タグに加えてシンボリックな
HEADを指定できるようになりました。対象は、List Commits、Get Commit、List Commit Files、Get Git Commit、Get Tree のsha、Get Contents と Batch Get Contents のref、および Compare Commits のbaseheadの両側です。 - 変更。 Git リファレンスを取得 はシンボリックな
HEADを解決し、先端のコミットとともにref: "HEAD"として返します。List Matching Git Refs と List Matching Git Refs by Path では、HEADはrefs/配下にないため、完全一致の場合にのみマッチします。 - 変更。 インストールを削除した場合、またはアプリを削除した場合、そのインストールのアクセストークンは
expiresAtを待たずに無効化されます。REST API と Git over HTTPS は取り消されたトークンを401で拒否するため、有効なトークンを再び発行するにはアプリを再インストールする必要があります。詳しくは インストールアクセストークン を参照してください。
- 破壊的変更。 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のいずれかのバリアントを読み取ってください。
- 非推奨:
OriginActor.kindおよびOriginActor.id。アクターの ID は、user、app、serviceAccountの各バリアントからなる判別共用体になりました。移行方法:トップレベルのkindとidではなく、選択されたバリアントのフィールドを読み取ってください。