ディスカッション API

ディスカッションは、関連するノートのセットです:

  • スニペット
  • イシュー
  • エピック
  • マージリクエスト
  • コミット

これにはコメントやスレッド、システムノートが含まれます。システムノートとは、オブジェクトの変更に関するメモです(例えば、マイルストーンが変更された場合など)。ラベルノートはこのAPIの一部ではなく、リソースラベルイベントに別のイベントとして記録されます。

ディスカッションのページネーション

デフォルトでは、API の結果はページ分割されているため、GET リクエストは一度に 20 件の結果を返します。

ページ分割についての詳細はこちらをご覧ください。

イシュー

プロジェクトのイシューのディスカッション項目をリストアップします。

1つのイシューに関するすべてのディスカッション項目のリストを取得します。

GET /projects/:id/issues/:issue_iid/discussions
属性種類必須説明
id整数/文字列yes プロジェクトのIDまたはURLエンコードされたパス
issue_iid整数。yesイシューのIID。
[
  {
    "id": "6a9c1750b37d513a43987b574953fceb50b03ce7",
    "individual_note": false,
    "notes": [
      {
        "id": 1126,
        "type": "DiscussionNote",
        "body": "discussion text",
        "attachment": null,
        "author": {
          "id": 1,
          "name": "root",
          "username": "root",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/00afb8fb6ab07c3ee3e9c1f38777e2f4?s=80&d=identicon",
          "web_url": "http://localhost:3000/root"
        },
        "created_at": "2018-03-03T21:54:39.668Z",
        "updated_at": "2018-03-03T21:54:39.668Z",
        "system": false,
        "noteable_id": 3,
        "noteable_type": "Issue",
        "project_id": 5,
        "noteable_iid": null
      },
      {
        "id": 1129,
        "type": "DiscussionNote",
        "body": "reply to the discussion",
        "attachment": null,
        "author": {
          "id": 1,
          "name": "root",
          "username": "root",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/00afb8fb6ab07c3ee3e9c1f38777e2f4?s=80&d=identicon",
          "web_url": "http://localhost:3000/root"
        },
        "created_at": "2018-03-04T13:38:02.127Z",
        "updated_at": "2018-03-04T13:38:02.127Z",
        "system": false,
        "noteable_id": 3,
        "noteable_type": "Issue",
        "project_id": 5,
        "noteable_iid": null,
        "resolvable": false
      }
    ]
  },
  {
    "id": "87805b7c09016a7058e91bdbe7b29d1f284a39e6",
    "individual_note": true,
    "notes": [
      {
        "id": 1128,
        "type": null,
        "body": "a single comment",
        "attachment": null,
        "author": {
          "id": 1,
          "name": "root",
          "username": "root",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/00afb8fb6ab07c3ee3e9c1f38777e2f4?s=80&d=identicon",
          "web_url": "http://localhost:3000/root"
        },
        "created_at": "2018-03-04T09:17:22.520Z",
        "updated_at": "2018-03-04T09:17:22.520Z",
        "system": false,
        "noteable_id": 3,
        "noteable_type": "Issue",
        "project_id": 5,
        "noteable_iid": null,
        "resolvable": false
      }
    ]
  }
]
curl --header "PRIVATE-TOKEN: <your_access_token>"\
  "https://gitlab.example.com/api/v4/projects/5/issues/11/discussions"

単一のイシュー・ディスカッション項目の取得

特定のプロジェクトのイシューに関する単一のディスカッション項目を返します。

GET /projects/:id/issues/:issue_iid/discussions/:discussion_id

パラメータを指定します:

属性種類必須説明
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
issue_iid整数。yesイシューのIID。
discussion_id整数。yesディスカッション項目のID。
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/issues/11/discussions/<discussion_id>"

新しいイシュー・スレッドの作成

1つのプロジェクトのイシューに新しいスレッドを作成します。ノートの作成と似ていますが、他のコメント(返信)を後から追加することができます。

POST /projects/:id/issues/:issue_iid/discussions

パラメータを指定します:

属性種類必須説明
body文字列です。yesスレッドの内容
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
issue_iid整数。yesイシューのIID。
created_at文字列です。いいえ日付時刻文字列、ISO 8601 形式、2016-03-11T03:45:40Z のような。管理者またはプロジェクト/グループのオーナー権限が必要です。
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/issues/11/discussions?body=comment"

既存のイシュースレッドにメモを追加

スレッドに新しいノートを追加します。1つのコメントからスレッドを作成することもできます。

caution
システムノートなど、コメント以外の項目にもノートを追加してスレッドにすることができます。
POST /projects/:id/issues/:issue_iid/discussions/:discussion_id/notes

パラメータを指定します:

属性種類必須説明
body文字列です。yesメモまたは返信の内容
discussion_id整数。yesスレッドのID。
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
issue_iid整数。yesイシューのIID。
note_id整数。yesスレッドノートのID。
created_at文字列です。いいえ日付時刻文字列、ISO 8601 形式、2016-03-11T03:45:40Z のような。管理者またはプロジェクト/グループのオーナー権限が必要です。
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/issues/11/discussions/<discussion_id>/notes?body=comment"

既存のイシュー・スレッド・ノートの変更

イシューの既存のスレッドノートを変更します。

PUT /projects/:id/issues/:issue_iid/discussions/:discussion_id/notes/:note_id

パラメータを指定します:

属性種類必須説明
body文字列です。yesメモまたは返信の内容
discussion_id整数。yesスレッドのID。
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
issue_iid整数。yesイシューのIID。
note_id整数。yesスレッドノートのID。
curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/issues/11/discussions/<discussion_id>/notes/1108?body=comment"

イシューのスレッドノートを削除します。

既存のイシューのスレッドノートを削除します。

DELETE /projects/:id/issues/:issue_iid/discussions/:discussion_id/notes/:note_id

パラメータを指定します:

属性種類必須説明
discussion_id整数。yesディスカッションのID。
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
issue_iid整数。yesイシューのIID。
note_id整数。yesディスカッションノートのID。
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/issues/11/discussions/636"

スニペット

プロジェクトスニペットディスカッション項目一覧

1つのスニペットに関するすべてのディスカッションアイテムのリストを取得します。

GET /projects/:id/snippets/:snippet_id/discussions
属性種類必須説明
id整数/文字列yes プロジェクトのIDまたはURLエンコードされたパス
snippet_id整数。yesスニペットのID。
[
  {
    "id": "6a9c1750b37d513a43987b574953fceb50b03ce7",
    "individual_note": false,
    "notes": [
      {
        "id": 1126,
        "type": "DiscussionNote",
        "body": "discussion text",
        "attachment": null,
        "author": {
          "id": 1,
          "name": "root",
          "username": "root",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/00afb8fb6ab07c3ee3e9c1f38777e2f4?s=80&d=identicon",
          "web_url": "http://localhost:3000/root"
        },
        "created_at": "2018-03-03T21:54:39.668Z",
        "updated_at": "2018-03-03T21:54:39.668Z",
        "system": false,
        "noteable_id": 3,
        "noteable_type": "Snippet",
        "project_id": 5,
        "noteable_iid": null
      },
      {
        "id": 1129,
        "type": "DiscussionNote",
        "body": "reply to the discussion",
        "attachment": null,
        "author": {
          "id": 1,
          "name": "root",
          "username": "root",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/00afb8fb6ab07c3ee3e9c1f38777e2f4?s=80&d=identicon",
          "web_url": "http://localhost:3000/root"
        },
        "created_at": "2018-03-04T13:38:02.127Z",
        "updated_at": "2018-03-04T13:38:02.127Z",
        "system": false,
        "noteable_id": 3,
        "noteable_type": "Snippet",
        "project_id": 5,
        "noteable_iid": null,
        "resolvable": false
      }
    ]
  },
  {
    "id": "87805b7c09016a7058e91bdbe7b29d1f284a39e6",
    "individual_note": true,
    "notes": [
      {
        "id": 1128,
        "type": null,
        "body": "a single comment",
        "attachment": null,
        "author": {
          "id": 1,
          "name": "root",
          "username": "root",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/00afb8fb6ab07c3ee3e9c1f38777e2f4?s=80&d=identicon",
          "web_url": "http://localhost:3000/root"
        },
        "created_at": "2018-03-04T09:17:22.520Z",
        "updated_at": "2018-03-04T09:17:22.520Z",
        "system": false,
        "noteable_id": 3,
        "noteable_type": "Snippet",
        "project_id": 5,
        "noteable_iid": null,
        "resolvable": false
      }
    ]
  }
]
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/snippets/11/discussions"

単一のスニペットディスカッション項目を取得します。

特定のプロジェクトのスニペットに関する単一のディスカッション項目を返します。

GET /projects/:id/snippets/:snippet_id/discussions/:discussion_id

パラメータを指定します:

属性種類必須説明
discussion_id整数。yesディスカッション項目のID。
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
snippet_id整数。yesスニペットのID。
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/snippets/11/discussions/<discussion_id>"

スニペットスレッドの新規作成

1つのプロジェクトスニペットに対して新しいスレッドを作成します。ノートの作成と似ていますが、他のコメント(返信)を後から追加することができます。

POST /projects/:id/snippets/:snippet_id/discussions

パラメータを指定します:

属性種類必須説明
body文字列です。yesディスカッションの内容
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
snippet_id整数。yesスニペットのID。
created_at文字列です。いいえ日付時刻文字列、ISO 8601 形式、2016-03-11T03:45:40Z のような。管理者またはプロジェクト/グループのオーナー権限が必要です。
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>"\
  "https://gitlab.example.com/api/v4/projects/5/snippets/11/discussions?body=comment"

既存のスニペットスレッドにメモを追加

スレッドに新しいノートを追加します。

POST /projects/:id/snippets/:snippet_id/discussions/:discussion_id/notes

パラメータを指定します:

属性種類必須説明
body文字列です。yesメモまたは返信の内容
discussion_id整数。yesスレッドのID。
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
note_id整数。yesスレッドノートのID。
snippet_id整数。yesスニペットのID。
created_at文字列です。いいえ日付時刻文字列、ISO 8601 形式、2016-03-11T03:45:40Z のような。管理者またはプロジェクト/グループのオーナー権限が必要です。
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/snippets/11/discussions/<discussion_id>/notes?body=comment"

既存のスニペットスレッドノートの変更

スニペットの既存のスレッドノートを修正します。

PUT /projects/:id/snippets/:snippet_id/discussions/:discussion_id/notes/:note_id

パラメータを指定します:

属性種類必須説明
body文字列です。yesメモまたは返信の内容
discussion_id整数。yesスレッドのID。
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
note_id整数。yesスレッドノートのID。
snippet_id整数。yesスニペットのID。
curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/snippets/11/discussions/<discussion_id>/notes/1108?body=comment"

スニペットスレッドノートの削除

既存のスニペットのスレッドノートを削除します。

DELETE /projects/:id/snippets/:snippet_id/discussions/:discussion_id/notes/:note_id

パラメータを指定します:

属性種類必須説明
discussion_id整数。yesディスカッションのID。
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
note_id整数。yesディスカッションノートのID。
snippet_id整数。yesスニペットのID。
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/snippets/11/discussions/636"

エピック

グループエピック討議項目一覧

単一のエピックに関するすべてのディスカッションアイテムのリストを取得します。

GET /groups/:id/epics/:epic_id/discussions
属性種類必須説明
epic_id整数。yesエピックのID。
id整数または文字列。yesグループのIDまたはURLエンコードされたパス
[
  {
    "id": "6a9c1750b37d513a43987b574953fceb50b03ce7",
    "individual_note": false,
    "notes": [
      {
        "id": 1126,
        "type": "DiscussionNote",
        "body": "discussion text",
        "attachment": null,
        "author": {
          "id": 1,
          "name": "root",
          "username": "root",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/00afb8fb6ab07c3ee3e9c1f38777e2f4?s=80&d=identicon",
          "web_url": "http://localhost:3000/root"
        },
        "created_at": "2018-03-03T21:54:39.668Z",
        "updated_at": "2018-03-03T21:54:39.668Z",
        "system": false,
        "noteable_id": 3,
        "noteable_type": "Epic",
        "project_id": 5,
        "noteable_iid": null,
        "resolvable": false
      },
      {
        "id": 1129,
        "type": "DiscussionNote",
        "body": "reply to the discussion",
        "attachment": null,
        "author": {
          "id": 1,
          "name": "root",
          "username": "root",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/00afb8fb6ab07c3ee3e9c1f38777e2f4?s=80&d=identicon",
          "web_url": "http://localhost:3000/root"
        },
        "created_at": "2018-03-04T13:38:02.127Z",
        "updated_at": "2018-03-04T13:38:02.127Z",
        "system": false,
        "noteable_id": 3,
        "noteable_type": "Epic",
        "project_id": 5,
        "noteable_iid": null,
        "resolvable": false
      }
    ]
  },
  {
    "id": "87805b7c09016a7058e91bdbe7b29d1f284a39e6",
    "individual_note": true,
    "notes": [
      {
        "id": 1128,
        "type": null,
        "body": "a single comment",
        "attachment": null,
        "author": {
          "id": 1,
          "name": "root",
          "username": "root",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/00afb8fb6ab07c3ee3e9c1f38777e2f4?s=80&d=identicon",
          "web_url": "http://localhost:3000/root"
        },
        "created_at": "2018-03-04T09:17:22.520Z",
        "updated_at": "2018-03-04T09:17:22.520Z",
        "system": false,
        "noteable_id": 3,
        "noteable_type": "Epic",
        "project_id": 5,
        "noteable_iid": null,
        "resolvable": false
      }
    ]
  }
]
curl --header "PRIVATE-TOKEN: <your_access_token>"\
  "https://gitlab.example.com/api/v4/groups/5/epics/11/discussions"

単一のエピック・ディスカッション・アイテムの取得

特定のグループエピックに関する単一のディスカッション項目を返します。

GET /groups/:id/epics/:epic_id/discussions/:discussion_id

パラメータを指定します:

属性種類必須説明
discussion_id整数。yesディスカッション項目のID。
epic_id整数。yesエピックのID。
id整数または文字列。yesグループのIDまたはURLエンコードされたパス
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/groups/5/epics/11/discussions/<discussion_id>"

エピックスレッドの新規作成

1つのグループエピックに新しいスレッドを作成します。ノートの作成と似ていますが、他のコメント(返信)を後から追加することができます。

POST /groups/:id/epics/:epic_id/discussions

パラメータを指定します:

属性種類必須説明
body文字列です。yesスレッドの内容
epic_id整数。yesエピックのID。
id整数または文字列。yesグループのIDまたはURLエンコードされたパス
created_at文字列です。いいえ日付時刻文字列、ISO 8601 形式、2016-03-11T03:45:40Z のような。管理者またはプロジェクト/グループのオーナー権限が必要です。
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/groups/5/epics/11/discussions?body=comment"

既存のエピックスレッドにメモを追加

スレッドに新しいノートを追加します。一つのコメントからスレッドを作成することもできます。

POST /groups/:id/epics/:epic_id/discussions/:discussion_id/notes

パラメータを指定します:

属性種類必須説明
body文字列です。yesメモまたは返信の内容
discussion_id整数。yesスレッドのID。
epic_id整数。yesエピックのID。
id整数または文字列。yesグループのIDまたはURLエンコードされたパス
note_id整数。yesスレッドノートのID。
created_at文字列です。いいえ日付時刻文字列、ISO 8601 形式、2016-03-11T03:45:40Z のような。管理者またはプロジェクト/グループのオーナー権限が必要です。
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/groups/5/epics/11/discussions/<discussion_id>/notes?body=comment"

既存のエピックスレッドノートの変更

エピックの既存のスレッドノートを修正します。

PUT /groups/:id/epics/:epic_id/discussions/:discussion_id/notes/:note_id

パラメータを指定します:

属性種類必須説明
body文字列です。yesメモまたは返信の内容
discussion_id整数。yesスレッドのID。
epic_id整数。yesエピックのID。
id整数/文字列yesグループのIDまたはURLエンコードされたパス
note_id整数。yesスレッドノートのID。
curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/groups/5/epics/11/discussions/<discussion_id>/notes/1108?body=comment"

エピックスレッドノートの削除

既存のエピックのスレッドノートを削除します。

DELETE /groups/:id/epics/:epic_id/discussions/:discussion_id/notes/:note_id

パラメータを指定します:

属性種類必須説明
discussion_id整数。yesスレッドのID。
epic_id整数。yesエピックのID。
id整数または文字列。yesグループのIDまたはURLエンコードされたパス
note_id整数。yesスレッドノートのID。
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/groups/5/epics/11/discussions/636"

マージリクエスト

プロジェクトマージリクエストのディスカッション項目を一覧表示します。

ひとつのマージリクエストのすべてのディスカッション項目の一覧を取得します。

GET /projects/:id/merge_requests/:merge_request_iid/discussions
属性種類必須説明
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
merge_request_iid整数。yesマージリクエストの IID。
[
  {
    "id": "6a9c1750b37d513a43987b574953fceb50b03ce7",
    "individual_note": false,
    "notes": [
      {
        "id": 1126,
        "type": "DiscussionNote",
        "body": "discussion text",
        "attachment": null,
        "author": {
          "id": 1,
          "name": "root",
          "username": "root",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/00afb8fb6ab07c3ee3e9c1f38777e2f4?s=80&d=identicon",
          "web_url": "http://localhost:3000/root"
        },
        "created_at": "2018-03-03T21:54:39.668Z",
        "updated_at": "2018-03-03T21:54:39.668Z",
        "system": false,
        "noteable_id": 3,
        "noteable_type": "Merge request",
        "project_id": 5,
        "noteable_iid": null,
        "resolved": false,
        "resolvable": true,
        "resolved_by": null,
        "resolved_at": null
      },
      {
        "id": 1129,
        "type": "DiscussionNote",
        "body": "reply to the discussion",
        "attachment": null,
        "author": {
          "id": 1,
          "name": "root",
          "username": "root",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/00afb8fb6ab07c3ee3e9c1f38777e2f4?s=80&d=identicon",
          "web_url": "http://localhost:3000/root"
        },
        "created_at": "2018-03-04T13:38:02.127Z",
        "updated_at": "2018-03-04T13:38:02.127Z",
        "system": false,
        "noteable_id": 3,
        "noteable_type": "Merge request",
        "project_id": 5,
        "noteable_iid": null,
        "resolved": false,
        "resolvable": true,
        "resolved_by": null
      }
    ]
  },
  {
    "id": "87805b7c09016a7058e91bdbe7b29d1f284a39e6",
    "individual_note": true,
    "notes": [
      {
        "id": 1128,
        "type": null,
        "body": "a single comment",
        "attachment": null,
        "author": {
          "id": 1,
          "name": "root",
          "username": "root",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/00afb8fb6ab07c3ee3e9c1f38777e2f4?s=80&d=identicon",
          "web_url": "http://localhost:3000/root"
        },
        "created_at": "2018-03-04T09:17:22.520Z",
        "updated_at": "2018-03-04T09:17:22.520Z",
        "system": false,
        "noteable_id": 3,
        "noteable_type": "Merge request",
        "project_id": 5,
        "noteable_iid": null,
        "resolved": false,
        "resolvable": true,
        "resolved_by": null
      }
    ]
  }
]

差分コメントには位置も含まれます:

[
  {
    "id": "87805b7c09016a7058e91bdbe7b29d1f284a39e6",
    "individual_note": false,
    "notes": [
      {
        "id": 1128,
        "type": "DiffNote",
        "body": "diff comment",
        "attachment": null,
        "author": {
          "id": 1,
          "name": "root",
          "username": "root",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/00afb8fb6ab07c3ee3e9c1f38777e2f4?s=80&d=identicon",
          "web_url": "http://localhost:3000/root"
        },
        "created_at": "2018-03-04T09:17:22.520Z",
        "updated_at": "2018-03-04T09:17:22.520Z",
        "system": false,
        "noteable_id": 3,
        "noteable_type": "Merge request",
        "project_id": 5,
        "noteable_iid": null,
        "commit_id": "4803c71e6b1833ca72b8b26ef2ecd5adc8a38031",
        "position": {
          "base_sha": "b5d6e7b1613fca24d250fa8e5bc7bcc3dd6002ef",
          "start_sha": "7c9c2ead8a320fb7ba0b4e234bd9529a2614e306",
          "head_sha": "4803c71e6b1833ca72b8b26ef2ecd5adc8a38031",
          "old_path": "package.json",
          "new_path": "package.json",
          "position_type": "text",
          "old_line": 27,
          "new_line": 27,
          "line_range": {
            "start": {
              "line_code": "588440f66559714280628a4f9799f0c4eb880a4a_10_10",
              "type": "new"
            },
            "end": {
              "line_code": "588440f66559714280628a4f9799f0c4eb880a4a_11_11",
              "type": "old"
            }
          }
        },
        "resolved": false,
        "resolvable": true,
        "resolved_by": null
      }
    ]
  }
]
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/merge_requests/11/discussions"

マージリクエストのディスカッション項目を取得します。

特定のプロジェクトのマージリクエストの単一のディスカッション項目を返します。

GET /projects/:id/merge_requests/:merge_request_iid/discussions/:discussion_id

パラメータを指定します:

属性種類必須説明
discussion_id文字列です。yesディスカッション項目のID。
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
merge_request_iid整数。yesマージリクエストの IID。
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/merge_requests/11/discussions/<discussion_id>"

新しいマージリクエストスレッドの作成

commit id エントリは GitLab 13.7 で導入されました。

一つのプロジェクトのマージリクエストに新しいスレッドを作成します。ノートの作成と似ていますが、他のコメント(返信)を後から追加することができます。他のアプローチについては、Commits API のPost comment to commitや Notes API のCreate new merge request noteを参照してください。

POST /projects/:id/merge_requests/:merge_request_iid/discussions

すべてのコメントのパラメータ

属性種類必須説明
body文字列です。yesスレッドの内容
id整数/文字列yes プロジェクトのIDまたはURLエンコードされたパス
merge_request_iid整数。yesマージリクエストの IID。
position[base_sha]文字列です。yesソースブランチのベースコミットSHA。
position[head_sha]文字列です。yesこのマージリクエストのHEADを参照するSHA。
position[start_sha]文字列です。yesターゲットブランチのコミットを参照する SHA。
position[new_path]文字列です。yes (ポジションタイプがtext の場合)変更後のファイルパス。
position[old_path]文字列です。yes (ポジションタイプがtext の場合)変更前のファイルパス。
position[position_type]文字列です。yes位置参照のタイプ。指定可能な値:text またはimage
commit_id文字列です。いいえこのスレッドを開始するためにSHA参照コミット。
created_at文字列です。いいえ日付時刻文字列、ISO 8601 形式、2016-03-11T03:45:40Z のような。管理者またはプロジェクト/グループのオーナー権限が必要です。
positionハッシュいいえ差分ノート作成時の位置
position[new_line]整数。いいえ text 差分ノートの場合、変更後の行番号。
position[old_line]整数。いいえ text 差分ノートの場合、変更前の行番号。
position[line_range]ハッシュいいえ複数行の差分音符の行範囲。
position[width]整数。いいえ image 差分ノートの場合、画像の幅。
position[height]整数。いいえ image 差分ノートの場合、画像の高さ。
position[x]フロートいいえ image 差分ノートの場合、X座標。
position[y]フロートいいえ image 差分ノートのY座標。

概要ページに新しいスレッドを作成してください。

curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/merge_requests/11/discussions?body=comment"

マージリクエストの差分に新しいスレッドを作成してください。

  • position[old_path]position[new_path] の両方が必須で、変更前と変更後のファイルパスを参照する必要があります。
  • 追加された行(マージリクエストの差分では緑色でハイライトされています)にスレッドを作成するには、position[new_line] を使用し、position[old_line] を含めないでください。
  • 削除された行にスレッドを作成するには (マージリクエストの diff で赤くハイライトされています)、position[old_line] を使用し、position[new_line]を含めないでください。
  • 変更のない行にスレッドを作成するには、その行のposition[new_line]position[old_line] の両方をインクルードします。ファイルの以前の変更によって行番号が変更された場合、これらの位置は同じではないかもしれません。修正についての議論は、イシュー32516を参照してください。
  • baseheadstartSHA のパラメータを正しく指定しないと、イシュー#296829で説明されているバグに遭遇する可能性があります)

新しいスレッドを作成するには

  1. 最新のマージリクエストバージョンを取得してください:

    curl --header "PRIVATE-TOKEN: <your_access_token>" \
      "https://gitlab.example.com/api/v4/projects/5/merge_requests/11/versions"
    
  2. レスポンス配列の最初に表示される最新バージョンの詳細に注意してください。

    [
      {
        "id": 164560414,
        "head_commit_sha": "f9ce7e16e56c162edbc9e480108041cf6b0291fe",
        "base_commit_sha": "5e6dffa282c5129aa67cd227a0429be21bfdaf80",
        "start_commit_sha": "5e6dffa282c5129aa67cd227a0429be21bfdaf80",
        "created_at": "2021-03-30T09:18:27.351Z",
        "merge_request_id": 93958054,
        "state": "collected",
        "real_size": "2"
      },
      "previous versions are here"
    ]
    
  3. 新しい diff スレッドを作成します。この例では、追加された行にスレッドを作成します:

    curl --request POST --header "PRIVATE-TOKEN: <your_access_token>"\
      --form 'position[position_type]=text'\
      --form 'position[base_sha]=<use base_commit_sha from the versions response>'\
      --form 'position[head_sha]=<use head_commit_sha from the versions response>'\
      --form 'position[start_sha]=<use start_commit_sha from the versions response>'\
      --form 'position[new_path]=file.js'\
      --form 'position[old_path]=file.js'\
      --form 'position[new_line]=18'\
      --form 'body=test comment body'\
      "https://gitlab.example.com/api/v4/projects/5/merge_requests/11/discussions"
    

複数行コメントのパラメータ

複数行コメント専用のパラメータです:

属性種類必須説明
position[line_range][end][line_code]文字列です。yes終了行の行コード
position[line_range][end][type]文字列です。yesこのコミットによって追加された行にはnew を使用し、そうでない場合はold を使用します。
position[line_range][start][line_code]文字列です。yesスタートラインのラインコード
position[line_range][start][type]文字列です。yesこのコミットによって追加された行にはnew を使用し、そうでない場合はold を使用します。
position[line_range][end]ハッシュいいえマルチラインノートの終了行。
position[line_range][start]ハッシュいいえマルチラインノートの開始行。

行コード

ラインコードは<SHA>_<old>_<new> のような形式です:adc83b19e793491b1c6ea0fd8b46cd9f32e292fc_5_5

  • <SHA> はファイル名のSHA1ハッシュです。
  • <old> は変更前の行番号です。
  • <new> は変更後の行番号です。

たとえば、コミット (<COMMIT_ID>) で README の 463 行目が削除された場合、古いファイルの 463 行目を参照することで、削除についてコメントすることができます:

curl --request POST --header "PRIVATE-TOKEN: [ACCESS_TOKEN]" \
  --form "note=Very clever to remove this unnecessary line!" \
  --form "path=README" --form "line=463" --form "line_type=old" \
  "https://gitlab.com/api/v4/projects/47/repository/commits/<COMMIT_ID>/comments"

コミット (<COMMIT_ID>) がhello.rb に 157 行を追加した場合、新しいファイルの 157 行を参照することで、追加についてコメントすることができます:

curl --request POST --header "PRIVATE-TOKEN: [ACCESS_TOKEN]" \
  --form "note=This is brilliant!" --form "path=hello.rb" \
  --form "line=157" --form "line_type=new" \
  "https://gitlab.com/api/v4/projects/47/repository/commits/<COMMIT_ID>/comments"

マージリクエストスレッドの解決

マージリクエストの議論スレッドを解決または未解決にします。

前提条件

  • 少なくとも開発者ロールを持っているか、レビュー対象の変更の作成者である必要があります。
PUT /projects/:id/merge_requests/:merge_request_iid/discussions/:discussion_id

パラメータを指定します:

属性種類必須説明
id整数/文字列yes プロジェクトのIDまたはURLエンコードされたパス
discussion_id文字列です。yesスレッドのID。
merge_request_iid整数。yesマージリクエストの IID。
resolvedbooleanyes議論を解決するかしないか。
curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/merge_requests/11/discussions/<discussion_id>?resolved=true"

既存のマージリクエストスレッドにメモを追加します。

スレッドに新しいノートを追加します。一つのコメントからスレッドを作成することもできます。

POST /projects/:id/merge_requests/:merge_request_iid/discussions/:discussion_id/notes

パラメータを指定します:

属性種類必須説明
body文字列です。yesメモまたは返信の内容
id整数/文字列yes プロジェクトのIDまたはURLエンコードされたパス
discussion_id文字列です。yesスレッドのID。
merge_request_iid整数。yesマージリクエストの IID。
note_id整数。yesスレッドノートのID。
created_at文字列です。いいえ日付時刻文字列、ISO 8601 形式、2016-03-11T03:45:40Z のような。管理者またはプロジェクト/グループのオーナー権限が必要です。
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/merge_requests/11/discussions/<discussion_id>/notes?body=comment"

既存のマージリクエストスレッドノートを修正します。

マージリクエストの既存のスレッドノートを修正または解決します。

PUT /projects/:id/merge_requests/:merge_request_iid/discussions/:discussion_id/notes/:note_id

パラメータを指定します:

属性種類必須説明
discussion_id文字列です。yesスレッドのID。
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
merge_request_iid整数。yesマージリクエストの IID。
note_id整数。yesスレッドノートのID。
body文字列です。いいえメモまたは返信の内容。body またはresolved のうち、正確に1つを設定する必要があります。
resolvedbooleanいいえノートの解決または解決解除。bodyresolved のどちらか一方が設定されている必要があります。
curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/merge_requests/11/discussions/<discussion_id>/notes/1108?body=comment"

ノートの解決

curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/merge_requests/11/discussions/<discussion_id>/notes/1108?resolved=true"

マージリクエストスレッドノートの削除

マージリクエストの既存のスレッドノートを削除します。

DELETE /projects/:id/merge_requests/:merge_request_iid/discussions/:discussion_id/notes/:note_id

パラメータを指定します:

属性種類必須説明
discussion_id文字列です。yesスレッドのID。
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
merge_request_iid整数。yesマージリクエストの IID。
note_id整数。yesスレッドノートのID。
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/merge_requests/11/discussions/636"

コミット

プロジェクトコミットのディスカッション項目一覧

ひとつのコミットに関するすべてのディスカッション項目の一覧を取得します。

GET /projects/:id/repository/commits/:commit_id/discussions
属性種類必須説明
commit_id文字列です。yesコミットのSHA。
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
[
  {
    "id": "6a9c1750b37d513a43987b574953fceb50b03ce7",
    "individual_note": false,
    "notes": [
      {
        "id": 1126,
        "type": "DiscussionNote",
        "body": "discussion text",
        "attachment": null,
        "author": {
          "id": 1,
          "name": "root",
          "username": "root",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/00afb8fb6ab07c3ee3e9c1f38777e2f4?s=80&d=identicon",
          "web_url": "http://localhost:3000/root"
        },
        "created_at": "2018-03-03T21:54:39.668Z",
        "updated_at": "2018-03-03T21:54:39.668Z",
        "system": false,
        "noteable_id": 3,
        "noteable_type": "Commit",
        "project_id": 5,
        "noteable_iid": null,
        "resolvable": false
      },
      {
        "id": 1129,
        "type": "DiscussionNote",
        "body": "reply to the discussion",
        "attachment": null,
        "author": {
          "id": 1,
          "name": "root",
          "username": "root",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/00afb8fb6ab07c3ee3e9c1f38777e2f4?s=80&d=identicon",
          "web_url": "http://localhost:3000/root"
        },
        "created_at": "2018-03-04T13:38:02.127Z",
        "updated_at": "2018-03-04T13:38:02.127Z",
        "system": false,
        "noteable_id": 3,
        "noteable_type": "Commit",
        "project_id": 5,
        "noteable_iid": null,
        "resolvable": false
      }
    ]
  },
  {
    "id": "87805b7c09016a7058e91bdbe7b29d1f284a39e6",
    "individual_note": true,
    "notes": [
      {
        "id": 1128,
        "type": null,
        "body": "a single comment",
        "attachment": null,
        "author": {
          "id": 1,
          "name": "root",
          "username": "root",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/00afb8fb6ab07c3ee3e9c1f38777e2f4?s=80&d=identicon",
          "web_url": "http://localhost:3000/root"
        },
        "created_at": "2018-03-04T09:17:22.520Z",
        "updated_at": "2018-03-04T09:17:22.520Z",
        "system": false,
        "noteable_id": 3,
        "noteable_type": "Commit",
        "project_id": 5,
        "noteable_iid": null,
        "resolvable": false
      }
    ]
  }
]

Diffコメントには位置も含まれます:

[
  {
    "id": "87805b7c09016a7058e91bdbe7b29d1f284a39e6",
    "individual_note": false,
    "notes": [
      {
        "id": 1128,
        "type": "DiffNote",
        "body": "diff comment",
        "attachment": null,
        "author": {
          "id": 1,
          "name": "root",
          "username": "root",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/00afb8fb6ab07c3ee3e9c1f38777e2f4?s=80&d=identicon",
          "web_url": "http://localhost:3000/root"
        },
        "created_at": "2018-03-04T09:17:22.520Z",
        "updated_at": "2018-03-04T09:17:22.520Z",
        "system": false,
        "noteable_id": 3,
        "noteable_type": "Commit",
        "project_id": 5,
        "noteable_iid": null,
        "position": {
          "base_sha": "b5d6e7b1613fca24d250fa8e5bc7bcc3dd6002ef",
          "start_sha": "7c9c2ead8a320fb7ba0b4e234bd9529a2614e306",
          "head_sha": "4803c71e6b1833ca72b8b26ef2ecd5adc8a38031",
          "old_path": "package.json",
          "new_path": "package.json",
          "position_type": "text",
          "old_line": 27,
          "new_line": 27
        },
        "resolvable": false
      }
    ]
  }
]
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/repository/commits/<commit_id>/discussions"

単一コミットのディスカッション項目を取得

特定のプロジェクトコミットに関する単一のディスカッション項目を返します。

GET /projects/:id/repository/commits/:commit_id/discussions/:discussion_id

パラメータを指定します:

属性種類必須説明
commit_id文字列です。yesコミットのSHA。
discussion_id文字列です。yesディスカッション項目のID。
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/repository/commits/<commit_id>/discussions/<discussion_id>"

新しいコミットスレッドの作成

ひとつのプロジェクトコミットに対して新しいスレッドを作成します。ノートの作成と似ていますが、他のコメント (返信) を後から追加することができます。

POST /projects/:id/repository/commits/:commit_id/discussions

パラメータを指定します:

属性種類必須説明
body文字列です。yesスレッドの内容
commit_id文字列です。yesコミットのSHA。
id整数/文字列yes プロジェクトのIDまたはURLエンコードされたパス
position[base_sha]文字列です。yes親コミットのSHA。
position[head_sha]文字列です。yesこのコミットの SHA。commit_id と同じ。
position[start_sha]文字列です。yes親コミットのSHA。
position[position_type]文字列です。yes位置参照のタイプ。指定可能な値:text またはimage
created_at文字列です。いいえ日付時刻文字列、ISO 8601 形式、2016-03-11T03:45:40Z のような。管理者またはプロジェクト/グループのオーナー権限が必要です。
positionハッシュいいえ差分ノート作成時の位置
position[new_path]文字列no変更後のファイルパス。 position[new_line]整数no変更後の行番号。 position[old_path]文字列no変更前のファイルパス。 position[old_line]整数no変更前の行番号。 position[height]整数no|image の差分ノートの場合、画像の高さ。 position[width]integerno image の差分ノートの場合、画像の幅。 position[x]integerno|image 差分ノートの場合、X座標。 position[y]integerno image の差分ノートの場合、Y座標。
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/repository/commits/<commit_id>/discussions?body=comment"

API リクエストの作成ルールは、マージリクエスト diff で新しいスレッドを作成する場合と同じです。例外があります:

  • base_sha
  • head_sha
  • start_sha

既存のコミットスレッドへのメモの追加

スレッドに新しいノートを追加します。

POST /projects/:id/repository/commits/:commit_id/discussions/:discussion_id/notes

パラメータを指定します:

属性種類必須説明
body文字列です。yesメモまたは返信の内容
commit_id文字列です。yesコミットのSHA。
discussion_id文字列です。yesスレッドのID。
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
note_id整数。yesスレッドノートのID。
created_at文字列です。いいえ日付時刻文字列、ISO 8601 フォーマット、例えば2016-03-11T03:45:40Z 。管理者またはプロジェクト/グループのオーナー権限が必要です。
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/repository/commits/<commit_id>/discussions/<discussion_id>/notes?body=comment

既存のコミットスレッドノートの変更

コミットの既存のスレッドノートを変更または解決します。

PUT /projects/:id/repository/commits/:commit_id/discussions/:discussion_id/notes/:note_id

パラメータを指定します:

属性種類必須説明
commit_id文字列です。yesコミットのSHA。
discussion_id文字列です。yesスレッドのID。
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
note_id整数。yesスレッドノートのID。
body文字列です。いいえメモの内容
curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/repository/commits/<commit_id>/discussions/<discussion_id>/notes/1108?body=comment"

ノートの解決

curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/repository/commits/<commit_id>/discussions/<discussion_id>/notes/1108?resolved=true"

コミットスレッドのノートの削除

コミットの既存のスレッドノートを削除します。

DELETE /projects/:id/repository/commits/:commit_id/discussions/:discussion_id/notes/:note_id

パラメータを指定します:

属性種類必須説明
id整数または文字列。yes プロジェクトのIDまたはURLエンコードされたパス
commit_id文字列です。yesコミットのSHA。
discussion_id文字列です。yesスレッドのID。
note_id整数。yesスレッドノートのID。
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" \
  "https://gitlab.example.com/api/v4/projects/5/repository/commits/<commit_id>/discussions/<discussion_id>/notes/636"