Creating an MR Review
Function
This API is used to create an MR review comment.
URI
POST /v2/repositories/{repository_id}/merge_requests/{merge_request_iid}/discussions
Parameter | Mandatory | Type | Description |
|---|---|---|---|
repository_id | Yes | Integer | Explanation: Repository ID. Constraints: Mandatory Range: Minimum value: 1 Maximum value: 2147483647 |
merge_request_iid | Yes | Integer | Explanation: MR IID (MR sequence number in the repository). Constraints: Mandatory Range: Minimum value: 1 Maximum value: 2147483647 |
Request Parameters
Parameter | Mandatory | Type | Description |
|---|---|---|---|
X-Auth-Token | Yes | String | Explanation: User token. It can be obtained by calling the corresponding IAM API. The value of X-Subject-Token in the response header is the user token. Constraints: Mandatory Range: 1–100,000 characters. Default value: None |
Parameter | Mandatory | Type | Description |
|---|---|---|---|
body | Yes | String | Explanation: Review comment. Constraints: Mandatory Range: Maximum length: 8,000 characters. Characters: Unicode \u0000 to \uffff. Special characters, such as emojis and uncommon characters, are not supported. Blank: The value cannot be null, an empty string, or only spaces. |
severity | No | String | Explanation: Severity. Non-suggestion reviews cannot be resolved by the assignee, MR creator, or committer. Range: Not passed or not an enumerated value. The default value is suggestion.
|
assignee_id | No | String | Explanation: Assigner ID. The value can be a user ID or username. Range: Max. 255 characters. |
review_categories | No | String | Explanation: Review comment type. Constraints: Only the configured types can be used. To configure a review type, choose Settings > Policy Settings > Review Comments. |
review_modules | No | String | Explanation: Review comment module. Constraints: Only the configured modules can be used. To configure a review type, choose Settings > Policy Settings > Review Comments. |
proposer_id | No | String | Explanation: Reviewer ID. The value can be a user ID or username. Range: Max. 255 characters. |
position | No | PositionDto object | Explanation: Code location information to associate the comment with. Range: None |
lineTypes | No | String | Explanation: Mode in which the comment is provided. Range:
|
Parameter | Mandatory | Type | Description |
|---|---|---|---|
base_sha | No | String | Explanation: Base commit node of the source branch. Range: 40 digits and letters. |
start_sha | No | String | Explanation: Latest commit node of the target branch. Range: 40 digits and letters. |
head_sha | No | String | Explanation: Latest commit node of the source branch. Range: 40 digits and letters. |
old_path | No | String | Explanation: Old file path. Range: None |
new_path | No | String | Explanation: New file path. Range: None |
position_type | No | String | Explanation: Change type. Range: None Default value: text |
old_line | No | Integer | Explanation: Line number before change. If the value is less than or equal to 0 or is null, the line is new and displayed in green on the right for comparison. Range: –1 to 2147483647 or null |
new_line | No | Integer | Explanation: New line No. If the value is less than or equal to 0 or is null, the line is deleted and displayed in red on the left for comparison. Range: –1 to 2147483647 or null |
Response Parameters
Status code: 200
Parameter | Type | Description |
|---|---|---|
error | Error object | Explanation: Response error code. |
result | MergeRequestDiscussionDto object | Explanation: Review comment information. Range: None |
status | String | Explanation: Response status. Range:
|
Parameter | Type | Description |
|---|---|---|
code | String | Explanation: Error code returned when the API fails to be called. Range:
|
message | String | Explanation: Error message returned when the API fails to be called. Range:
|
Parameter | Type | Description |
|---|---|---|
id | String | Explanation: ID shared by the main comment and reply, which is generally called discussion_id. Range: 40 digits and letters. |
individual_note | Boolean | Explanation: Whether the comment is individual and does not need resolution by others. Range:
|
notes | Array of NoteDto objects | Explanation: Main comment and reply list. The first one is the main comment. (This API is used to create a main comment. Therefore, there is only one comment.) Range: None |
project_id | Integer | Explanation: Repository ID. Range: Minimum value: 1 Maximum value: 2147483647 |
noteable_type | String | Explanation: Comment type. Range:
|
commit_id | String | Explanation: Associated commit ID: SHA value of a commit. This field applies when noteable_type is set to Commit. Range: 40 digits and letters. |
project_full_path | String | Explanation: Repository path. Range: None |
a_mode | String | Explanation: Mode of an associated file before the change. If the file is new, the value is 0. Range: File permissions supported by Git, for example, 100644, 100755, 120000, and 160000. |
b_mode | String | Explanation: Mode of an associated file after the change. If the file is deleted, the value is 0. Range: File permissions supported by Git, for example, 100644, 100755, 120000, and 160000. |
deleted_file | Boolean | Explanation: Whether an associated file is deleted. Range:
|
new_file | Boolean | Explanation: Whether an associated file is new. Range:
|
resolved | Boolean | Explanation: Whether the review comment has been resolved. Range:
|
archived | Boolean | Explanation: Whether the review comment has been archived. Archived comments cannot be edited, deleted, replied, or resolved. Range:
|
review_categories | String | Explanation: Comment type key. The values of review_categories, review_categories_cn, and review_categories_en must match. Range: None |
review_categories_cn | String | Explanation: Comment type in Chinese. The values of review_categories and review_categories_cn must match. Range: None |
review_categories_en | String | Explanation: Comment type in English. The values of review_categories and review_categories_en must match. Range: None |
review_modules | String | Explanation: Review comment module. Range: None |
severity | String | Explanation: Review comment severity key. Range:
|
severity_cn | String | Explanation: Severity in Chinese. Range:
|
severity_en | String | Explanation: Severity in English. Range:
|
assignee | UserBasicDto object | Explanation: Assignee details. Range: None |
proposer | UserBasicDto object | Explanation: Proposer details. Range: None |
merge_request_version_params | MergeRequestVersionParamsDto object | Explanation: MR version details. Range: None |
diff_file | String | Explanation: File path change. Range: None |
added_lines | Integer | Explanation: Number of new lines. Range: Minimum value: 0 Maximum value: 2147483647 |
removed_lines | Integer | Explanation: Number of deleted lines. Range: Minimum value: 0 Maximum value: 2147483647 |
Parameter | Type | Description |
|---|---|---|
id | Integer | Explanation: Comment ID, which is not shared by the main comment and replies. Range: Minimum value: 1 Maximum value: 2147483647 |
type | String | Explanation: Note type. Range:
|
body | String | Explanation: Review comment content. Range: Maximum length: 8,000 characters. Characters: Unicode \u0000 to \uffff. Special characters, such as emojis and uncommon characters, are not supported. Blank: The value cannot be null, an empty string, or only spaces. |
attachment | String | Explanation: Attachment. (This field has been discarded.) Range: None |
author | UserBasicDto object | Explanation: Author details. Range: None |
created_at | String | Explanation: Creation time. Constraints: Format: yyyy-MM-ddTHH:mm:ss.SSS+08:00 |
updated_at | String | Explanation: Update time. Constraints: Format: yyyy-MM-ddTHH:mm:ss.SSS+08:00 |
system | Boolean | Explanation: Whether the comment is generated by the system. Range:
|
noteable_id | Integer | Explanation: MR ID. Range: Minimum value: 1 Maximum value: 2147483647 |
noteable_type | String | Explanation: Comment type. Range:
|
commit_id | String | Explanation: Associated commit ID: SHA value of a commit. This field applies when noteable_type is set to Commit. Range: 40 digits and letters. |
resolvable | Boolean | Explanation: Whether the comment needs to be resolved. Range:
|
is_reply | Boolean | Explanation: Whether the comment is a reply. Range:
|
resolved_by | UserBasicDto object | Explanation: Comment resolver. Range: None |
noteable_iid | Integer | Explanation: MR IID, indicating the sequence number of the MR in the repository. Range: Minimum value: 1 Maximum value: 2147483647 |
discussion_id | String | Explanation: Review comment ID, which is shared by the main comment and replies. Range: 40 digits and letters. |
project | String | Explanation: Project path. Range: None |
diff_file | String | Explanation: File path change. Range: None |
diff | String | Explanation: File content change. Range: None |
archived | Boolean | Explanation: Whether the review comment has been archived. Archived comments cannot be edited, deleted, replied, or resolved. Range:
|
review_categories | String | Explanation: Comment type key. The values of review_categories, review_categories_cn, and review_categories_en must match. Range: None |
review_categories_cn | String | Explanation: Comment type in Chinese. The values of review_categories and review_categories_cn must match. Range: None |
review_categories_en | String | Explanation: Comment type in English. The values of review_categories and review_categories_en must match. Range: None |
review_modules | String | Explanation: Review comment module. Range: None |
severity | String | Explanation: Severity. Non-suggestion reviews cannot be resolved by the assignee, MR creator, or committer. Range:
|
severity_cn | String | Explanation: Severity in Chinese. Range:
|
severity_en | String | Explanation: Severity in English. Range:
|
file_path | String | Explanation: File path. (This field has been discarded.) Range: None |
line | String | Explanation: Line number. (This field has been discarded.) Range: None |
assignee | UserBasicDto object | Explanation: Assignee details. Range: None |
proposer | UserBasicDto object | Explanation: Reviewer details. Range: None |
position | PositionDto object | Explanation: Code location information to associate the comment with. Range: None |
resolved | Boolean | Explanation: Whether the review comment has been resolved. Range:
|
is_outdated | Boolean | Explanation: Whether the review comment is for the latest commit. Range:
|
Parameter | Type | Description |
|---|---|---|
base_sha | String | Explanation: Base commit node of the source branch. Range: 40 digits and letters. |
start_sha | String | Explanation: Latest commit node of the source branch. Range: 40 digits and letters. |
head_sha | String | Explanation: Latest commit node of the target branch. Range: 40 digits and letters. |
old_path | String | Explanation: Old file path. Range: None |
new_path | String | Explanation: New file path. Range: None |
position_type | String | Explanation: Change type. Range: None Default value: text |
old_line | Integer | Explanation: Line number before change. If the value is less than or equal to 0 or is null, the line is new and displayed in green on the right for comparison. Range: –1 to 2147483647 or null |
new_line | Integer | Explanation: New line No. If the value is less than or equal to 0 or is null, the line is deleted and displayed in red on the left for comparison. Range: –1 to 2147483647 or null |
Parameter | Type | Description |
|---|---|---|
id | Integer | Explanation: User ID. Range: Minimum value: 1 Maximum value: 2147483647 |
name | String | Explanation: Name. Range: Max. 255 characters. |
username | String | Explanation: Username. Range: Max. 255 characters. |
state | String | Explanation: Status. Range: Max. 255 characters. |
avatar_url | String | Explanation: URL for obtaining the profile picture. Range: None |
avatar_path | String | Explanation: Path for obtaining the profile picture. Range: None |
String | Explanation: Email address. Range: None | |
name_cn | String | Explanation: Chinese name. Constraints: The value is the same as that of username. This field has been discarded. Range: None |
web_url | String | Explanation: Homepage URL. Range: None |
nick_name | String | Explanation: Alias. Range: None |
tenant_name | String | Explanation: Tenant name. Range: None |
Parameter | Type | Description |
|---|---|---|
diff_id | Integer | Explanation: Each MR version has a unique diff_id. (In this API, the MR version is the latest.) Range: Minimum value: 1 Maximum value: 2147483647 |
start_sha | String | Explanation: Latest commit node of the target branch. Range: 40 digits and letters. |
commit_id | String | Explanation: Associated commit ID: SHA value of a commit. This field applies when noteable_type is set to Commit. Range: 40 digits and letters. |
Example Requests
POST https://{endpoint}/v2/repositories/{repository_id}/merge_requests/{merge_request_iid}/discussions
{
"body": "Review comment",
"lineTypes": "new",
"position": {
"base_sha": "a9ce1513d5185d5fe2bac52c597f204ce695c4be",
"start_sha": "a9ce1513d5185d5fe2bac52c597f204ce695c4be",
"head_sha": "53c75fa88dc4e7d0b68d108b7f1ee0a5c4564f44",
"position_type": "text",
"new_path": "a.txt",
"old_path": "a.txt",
"new_line": 1,
"old_line": -1
},
"assignee_id": 9124,
"proposer_id": null,
"severity": "suggestion",
"review_modules": "Module",
"review_categories": "Type"
} Example Responses
Status code: 200
OK
{
"result": {
"id": "996f57b8fdd5e62678b16f0ea4f91688405fa72f",
"individual_note": false,
"notes": [
{
"id": 2111974336,
"type": "DiffNote",
"body": "Review comment",
"author": {
"id": 9124,
"name": "CodeHub_beta_dev",
"username": "c369c68f1ff84679b5a8ed904d8bff1c",
"state": "active",
"avatar_url": "",
"email": "liujian@example.com",
"name_cn": "CodeHub_beta_dev",
"web_url": "https://test.com/c369c68f1ff84679b5a8ed904d8bff1c",
"nick_name": "Alias",
"tenant_name": "devcloud_codehub_l00314597_01"
},
"created_at": "2024-07-29T22:01:37.000+08:00",
"updated_at": "2024-07-29T22:01:37.000+08:00",
"system": false,
"noteable_id": 38517,
"noteable_type": "MergeRequest",
"resolvable": true,
"is_reply": false,
"noteable_iid": 18,
"discussion_id": "996f57b8fdd5e62678b16f0ea4f91688405fa72f",
"project": "sll_test00006/mr_test",
"diff_file": "a.txt",
"diff": "@@ -0,0 +1,0 @@\n+1\r\n",
"archived": false,
"review_categories": "Type",
"review_categories_cn": "Type",
"review_categories_en": "Type",
"review_modules": "Module",
"severity": "suggestion",
"severity_cn": "Suggestion",
"severity_en": "Suggestion",
"assignee": {
"id": 9124,
"name": "CodeHub_beta_dev",
"username": "c369c68f1ff84679b5a8ed904d8bff1c",
"state": "active",
"avatar_url": "",
"email": "liujian@example.com",
"name_cn": "CodeHub_beta_dev",
"web_url": "https://test.com/c369c68f1ff84679b5a8ed904d8bff1c",
"nick_name": "Alias",
"tenant_name": "devcloud_codehub_l00314597_01"
},
"proposer": {
"id": 9124,
"name": "CodeHub_beta_dev",
"username": "c369c68f1ff84679b5a8ed904d8bff1c",
"state": "active",
"avatar_url": "",
"email": "liujian@example.com",
"name_cn": "CodeHub_beta_dev",
"web_url": "https://test.com/c369c68f1ff84679b5a8ed904d8bff1c",
"nick_name": "Alias",
"tenant_name": "devcloud_codehub_l00314597_01"
},
"position": {
"base_sha": "a9ce1513d5185d5fe2bac52c597f204ce695c4be",
"start_sha": "a9ce1513d5185d5fe2bac52c597f204ce695c4be",
"head_sha": "53c75fa88dc4e7d0b68d108b7f1ee0a5c4564f44",
"old_path": "a.txt",
"new_path": "a.txt",
"position_type": "text",
"new_line": 1
},
"resolved": false,
"is_outdated": false
}
],
"project_id": 2111704470,
"noteable_type": "MergeRequest",
"project_full_path": "sll_test00006/mr_test",
"a_mode": "0",
"b_mode": "100644",
"deleted_file": false,
"new_file": true,
"resolved": false,
"archived": false,
"review_categories": "Type",
"review_categories_en": "Type",
"review_modules": "Module",
"severity": "suggestion",
"severity_en": "Suggestion",
"assignee": {
"id": 9124,
"name": "CodeHub_beta_dev",
"username": "c369c68f1ff84679b5a8ed904d8bff1c",
"state": "active",
"avatar_url": "",
"email": "liujian@example.com",
"name_cn": "CodeHub_beta_dev",
"web_url": "https://test.com/c369c68f1ff84679b5a8ed904d8bff1c",
"nick_name": "Alias",
"tenant_name": "devcloud_codehub_l00314597_01"
},
"proposer": {
"id": 9124,
"name": "CodeHub_beta_dev",
"username": "c369c68f1ff84679b5a8ed904d8bff1c",
"state": "active",
"avatar_url": "",
"email": "liujian@example.com",
"name_cn": "CodeHub_beta_dev",
"web_url": "https://test.com/c369c68f1ff84679b5a8ed904d8bff1c",
"nick_name": "Alias",
"tenant_name": "devcloud_codehub_l00314597_01"
},
"merge_request_version_params": {},
"diff_file": "@@ -0,0 +1,0 @@\n+1\r\n",
"added_lines": 2,
"removed_lines": 0
},
"status": "success"
} Status Codes
Status Code | Description |
|---|---|
200 | OK |
Error Codes
Status Code | Error Code | Error Message | Description | Measure |
|---|---|---|---|---|
400 | CH.00401999 | 'body': The body is out of max length (8000 characters). | The review comment exceeds 8,000 characters. | Reduce the content. |
400 | CH.00401015 | String cannot contain emoticons or uncommon characters | Only Unicode characters from \u0000 to \uffff can be used. Special characters, such as emojis and uncommon characters, are not supported. | Delete the special characters. |
405 | CH.00406019 | The current MR/CR is not allowed to be reviewed after being merged, change the settings to enable this operation | The MR or CR has been merged. No more review comments can be added. | Choose Settings > Policy Settings > Merge Requests, and select Allow code review and comment for merged or closed MRs. |
404 | CH.00406026 | MR/CR extend not found | No additional MR/CR information is found in the database. | Refresh the page and try again. |
400 | CH.00406029 | The current MR/CR is in merging process, can not add new review | The MR/CR is being merged. | Try again later. |
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.

