summaryrefslogtreecommitdiff
path: root/doc/api
diff options
context:
space:
mode:
Diffstat (limited to 'doc/api')
-rw-r--r--doc/api/README.md2
-rw-r--r--doc/api/commits.md36
-rw-r--r--doc/api/groups.md4
-rw-r--r--doc/api/namespaces.md10
-rw-r--r--doc/api/project_import_export.md74
-rw-r--r--doc/api/projects.md8
-rw-r--r--doc/api/search.md800
-rw-r--r--doc/api/users.md12
8 files changed, 941 insertions, 5 deletions
diff --git a/doc/api/README.md b/doc/api/README.md
index f226716c3b5..b193ef4ab7f 100644
--- a/doc/api/README.md
+++ b/doc/api/README.md
@@ -43,12 +43,14 @@ following locations:
- [Pipeline Schedules](pipeline_schedules.md)
- [Projects](projects.md) including setting Webhooks
- [Project Access Requests](access_requests.md)
+- [Project import/export](project_import_export.md)
- [Project Members](members.md)
- [Project Snippets](project_snippets.md)
- [Protected Branches](protected_branches.md)
- [Repositories](repositories.md)
- [Repository Files](repository_files.md)
- [Runners](runners.md)
+- [Search](search.md)
- [Services](services.md)
- [Settings](settings.md)
- [Sidekiq metrics](sidekiq_metrics.md)
diff --git a/doc/api/commits.md b/doc/api/commits.md
index 63554c63057..2c745d00887 100644
--- a/doc/api/commits.md
+++ b/doc/api/commits.md
@@ -198,6 +198,41 @@ Example response:
}
```
+## Get references a commit is pushed to
+
+> [Introduced][ce-15026] in GitLab 10.6
+
+Get all references (from branches or tags) a commit is pushed to.
+The pagination parameters `page` and `per_page` can be used to restrict the list of references.
+
+```
+GET /projects/:id/repository/commits/:sha/refs
+```
+
+Parameters:
+
+| Attribute | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user
+| `sha` | string | yes | The commit hash |
+| `type` | string | no | The scope of commits. Possible values `branch`, `tag`, `all`. Default is `all`. |
+
+```bash
+curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v4/projects/5/repository/commits/5937ac0a7beb003549fc5fd26fc247adbce4a52e/refs?type=all"
+```
+
+Example response:
+
+```json
+[
+ {"type": "branch", "name": "'test'"},
+ {"type": "branch", "name": "add-balsamiq-file"},
+ {"type": "branch", "name": "wip"},
+ {"type": "tag", "name": "v1.1.0"}
+ ]
+
+```
+
## Cherry pick a commit
> [Introduced][ce-8047] in GitLab 8.15.
@@ -500,3 +535,4 @@ Example response:
[ce-6096]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/6096 "Multi-file commit"
[ce-8047]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/8047
+[ce-15026]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/15026
diff --git a/doc/api/groups.md b/doc/api/groups.md
index de730cdd869..f50558b58a6 100644
--- a/doc/api/groups.md
+++ b/doc/api/groups.md
@@ -15,6 +15,7 @@ Parameters:
| `order_by` | string | no | Order groups by `name` or `path`. Default is `name` |
| `sort` | string | no | Order groups in `asc` or `desc` order. Default is `asc` |
| `statistics` | boolean | no | Include group statistics (admins only) |
+| `with_custom_attributes` | boolean | no | Include [custom attributes](custom_attributes.md) in response (admins only) |
| `owned` | boolean | no | Limit to groups owned by the current user |
```
@@ -98,6 +99,7 @@ Parameters:
| `order_by` | string | no | Order groups by `name` or `path`. Default is `name` |
| `sort` | string | no | Order groups in `asc` or `desc` order. Default is `asc` |
| `statistics` | boolean | no | Include group statistics (admins only) |
+| `with_custom_attributes` | boolean | no | Include [custom attributes](custom_attributes.md) in response (admins only) |
| `owned` | boolean | no | Limit to groups owned by the current user |
```
@@ -145,6 +147,7 @@ Parameters:
| `simple` | boolean | no | Return only the ID, URL, name, and path of each project |
| `owned` | boolean | no | Limit by projects owned by the current user |
| `starred` | boolean | no | Limit by projects starred by the current user |
+| `with_custom_attributes` | boolean | no | Include [custom attributes](custom_attributes.md) in response (admins only) |
Example response:
@@ -204,6 +207,7 @@ Parameters:
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the group](README.md#namespaced-path-encoding) owned by the authenticated user |
+| `with_custom_attributes` | boolean | no | Include [custom attributes](custom_attributes.md) in response (admins only) |
```bash
curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/groups/4
diff --git a/doc/api/namespaces.md b/doc/api/namespaces.md
index 25cae5ce1f9..1f0dc700640 100644
--- a/doc/api/namespaces.md
+++ b/doc/api/namespaces.md
@@ -39,7 +39,7 @@ Example response:
"path": "group1",
"kind": "group",
"full_path": "group1",
- "parent_id": "null",
+ "parent_id": null,
"members_count_with_descendants": 2
},
{
@@ -48,7 +48,7 @@ Example response:
"path": "bar",
"kind": "group",
"full_path": "foo/bar",
- "parent_id": "9",
+ "parent_id": 9,
"members_count_with_descendants": 5
}
]
@@ -84,7 +84,7 @@ Example response:
"path": "twitter",
"kind": "group",
"full_path": "twitter",
- "parent_id": "null",
+ "parent_id": null,
"members_count_with_descendants": 2
}
]
@@ -117,7 +117,7 @@ Example response:
"path": "group1",
"kind": "group",
"full_path": "group1",
- "parent_id": "null",
+ "parent_id": null,
"members_count_with_descendants": 2
}
```
@@ -137,7 +137,7 @@ Example response:
"path": "group1",
"kind": "group",
"full_path": "group1",
- "parent_id": "null",
+ "parent_id": null,
"members_count_with_descendants": 2
}
```
diff --git a/doc/api/project_import_export.md b/doc/api/project_import_export.md
new file mode 100644
index 00000000000..e442442c750
--- /dev/null
+++ b/doc/api/project_import_export.md
@@ -0,0 +1,74 @@
+# Project import API
+
+[Introduced][ce-41899] in GitLab 10.6
+
+[See also the project import/export documentation](../user/project/settings/import_export.md)
+
+## Import a file
+
+```http
+POST /projects/import
+```
+
+| Attribute | Type | Required | Description |
+| --------- | -------------- | -------- | ---------------------------------------- |
+| `namespace` | integer/string | no | The ID or path of the namespace that the project will be imported to. Defaults to the current user's namespace |
+| `file` | string | yes | The file to be uploaded |
+| `path` | string | yes | Name and path for new project |
+
+To upload a file from your filesystem, use the `--form` argument. This causes
+cURL to post data using the header `Content-Type: multipart/form-data`.
+The `file=` parameter must point to a file on your filesystem and be preceded
+by `@`. For example:
+
+```console
+curl --request POST --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" --form "path=api-project" --form "file=@/path/to/file" https://gitlab.example.com/api/v4/projects/import
+```
+
+```json
+{
+ "id": 1,
+ "description": null,
+ "name": "api-project",
+ "name_with_namespace": "Administrator / api-project",
+ "path": "api-project",
+ "path_with_namespace": "root/api-project",
+ "created_at": "2018-02-13T09:05:58.023Z",
+ "import_status": "scheduled"
+}
+```
+
+## Import status
+
+Get the status of an import.
+
+```http
+GET /projects/:id/import
+```
+
+| Attribute | Type | Required | Description |
+| --------- | -------------- | -------- | ---------------------------------------- |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
+
+```console
+curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/1/import
+```
+
+Status can be one of `none`, `scheduled`, `failed`, `started`, or `finished`.
+
+If the status is `failed`, it will include the import error message under `import_error`.
+
+```json
+{
+ "id": 1,
+ "description": "Itaque perspiciatis minima aspernatur corporis consequatur.",
+ "name": "Gitlab Test",
+ "name_with_namespace": "Gitlab Org / Gitlab Test",
+ "path": "gitlab-test",
+ "path_with_namespace": "gitlab-org/gitlab-test",
+ "created_at": "2017-08-29T04:36:44.383Z",
+ "import_status": "started"
+}
+```
+
+[ce-41899]: https://gitlab.com/gitlab-org/gitlab-ce/issues/41899
diff --git a/doc/api/projects.md b/doc/api/projects.md
index 46f5de5aa0e..9e649efea9c 100644
--- a/doc/api/projects.md
+++ b/doc/api/projects.md
@@ -37,6 +37,7 @@ GET /projects
| `membership` | boolean | no | Limit by projects that the current user is a member of |
| `starred` | boolean | no | Limit by projects starred by the current user |
| `statistics` | boolean | no | Include project statistics |
+| `with_custom_attributes` | boolean | no | Include [custom attributes](custom_attributes.md) in response (admins only) |
| `with_issues_enabled` | boolean | no | Limit by enabled issues feature |
| `with_merge_requests_enabled` | boolean | no | Limit by enabled merge requests feature |
@@ -220,6 +221,7 @@ GET /users/:user_id/projects
| `membership` | boolean | no | Limit by projects that the current user is a member of |
| `starred` | boolean | no | Limit by projects starred by the current user |
| `statistics` | boolean | no | Include project statistics |
+| `with_custom_attributes` | boolean | no | Include [custom attributes](custom_attributes.md) in response (admins only) |
| `with_issues_enabled` | boolean | no | Limit by enabled issues feature |
| `with_merge_requests_enabled` | boolean | no | Limit by enabled merge requests feature |
@@ -388,6 +390,7 @@ GET /projects/:id
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) |
| `statistics` | boolean | no | Include project statistics |
+| `with_custom_attributes` | boolean | no | Include [custom attributes](custom_attributes.md) in response (admins only) |
```json
{
@@ -664,6 +667,7 @@ GET /projects/:id/forks
| `membership` | boolean | no | Limit by projects that the current user is a member of |
| `starred` | boolean | no | Limit by projects starred by the current user |
| `statistics` | boolean | no | Include project statistics |
+| `with_custom_attributes` | boolean | no | Include [custom attributes](custom_attributes.md) in response (admins only) |
| `with_issues_enabled` | boolean | no | Limit by enabled issues feature |
| `with_merge_requests_enabled` | boolean | no | Limit by enabled merge requests feature |
@@ -1326,6 +1330,10 @@ POST /projects/:id/housekeeping
Read more in the [Branches](branches.md) documentation.
+## Project Import/Export
+
+Read more in the [Project import/export](project_import_export.md) documentation.
+
## Project members
Read more in the [Project members](members.md) documentation.
diff --git a/doc/api/search.md b/doc/api/search.md
new file mode 100644
index 00000000000..d441b556186
--- /dev/null
+++ b/doc/api/search.md
@@ -0,0 +1,800 @@
+# Search API
+
+[Introduced][ce-41763] in GitLab 10.5
+
+Every API call to search must be authenticated.
+
+## Global Search API
+
+Search globally across the GitLab instance.
+
+```
+GET /search
+```
+
+| Attribute | Type | Required | Description |
+| ------------------- | ---------------- | ---------- | ---------------------------------------------------------------------------------------|
+| `scope` | string | yes | The scope to search in |
+| `search` | string | yes | The search query |
+
+Search the expression within the specified scope. Currently these scopes are supported: projects, issues, merge_requests, milestones, snippet_titles, snippet_blobs.
+
+The response depends on the requested scope.
+
+### Scope: projects
+
+```bash
+curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/search?scope=projects&search=flight
+```
+
+Example response:
+
+```json
+[
+ {
+ "id": 6,
+ "description": "Nobis sed ipsam vero quod cupiditate veritatis hic.",
+ "name": "Flight",
+ "name_with_namespace": "Twitter / Flight",
+ "path": "flight",
+ "path_with_namespace": "twitter/flight",
+ "created_at": "2017-09-05T07:58:01.621Z",
+ "default_branch": "master",
+ "tag_list":[],
+ "ssh_url_to_repo": "ssh://jarka@localhost:2222/twitter/flight.git",
+ "http_url_to_repo": "http://localhost:3000/twitter/flight.git",
+ "web_url": "http://localhost:3000/twitter/flight",
+ "avatar_url": null,
+ "star_count": 0,
+ "forks_count": 0,
+ "last_activity_at": "2018-01-31T09:56:30.902Z"
+ }
+]
+```
+
+### Scope: issues
+
+```bash
+curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/search?scope=issues&search=file
+```
+
+Example response:
+
+```json
+[
+ {
+ "id": 83,
+ "iid": 1,
+ "project_id": 12,
+ "title": "Add file",
+ "description": "Add first file",
+ "state": "opened",
+ "created_at": "2018-01-24T06:02:15.514Z",
+ "updated_at": "2018-02-06T12:36:23.263Z",
+ "closed_at": null,
+ "labels":[],
+ "milestone": null,
+ "assignees": [{
+ "id": 20,
+ "name": "Ceola Deckow",
+ "username": "sammy.collier",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/c23d85a4f50e0ea76ab739156c639231?s=80&d=identicon",
+ "web_url": "http://localhost:3000/sammy.collier"
+ }],
+ "author": {
+ "id": 1,
+ "name": "Administrator",
+ "username": "root",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
+ "web_url": "http://localhost:3000/root"
+ },
+ "assignee": {
+ "id": 20,
+ "name": "Ceola Deckow",
+ "username": "sammy.collier",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/c23d85a4f50e0ea76ab739156c639231?s=80&d=identicon",
+ "web_url": "http://localhost:3000/sammy.collier"
+ },
+ "user_notes_count": 0,
+ "upvotes": 0,
+ "downvotes": 0,
+ "due_date": null,
+ "confidential": false,
+ "discussion_locked": null,
+ "web_url": "http://localhost:3000/h5bp/7bp/subgroup-prj/issues/1",
+ "time_stats": {
+ "time_estimate": 0,
+ "total_time_spent": 0,
+ "human_time_estimate": null,
+ "human_total_time_spent": null
+ }
+ }
+]
+```
+
+**Note**: `assignee` column is deprecated, now we show it as a single-sized array `assignees` to conform to the GitLab EE API.
+
+### Scope: merge_requests
+
+```bash
+curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/search?scope=merge_requests&search=file
+```
+
+Example response:
+
+```json
+[
+ {
+ "id": 56,
+ "iid": 8,
+ "project_id": 6,
+ "title": "Add first file",
+ "description": "This is a test MR to add file",
+ "state": "opened",
+ "created_at": "2018-01-22T14:21:50.830Z",
+ "updated_at": "2018-02-06T12:40:33.295Z",
+ "target_branch": "master",
+ "source_branch": "jaja-test",
+ "upvotes": 0,
+ "downvotes": 0,
+ "author": {
+ "id": 1,
+ "name": "Administrator",
+ "username": "root",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
+ "web_url": "http://localhost:3000/root"
+ },
+ "assignee": {
+ "id": 5,
+ "name": "Jacquelyn Kutch",
+ "username": "abigail",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/3138c66095ee4bd11a508c2f7f7772da?s=80&d=identicon",
+ "web_url": "http://localhost:3000/abigail"
+ },
+ "source_project_id": 6,
+ "target_project_id": 6,
+ "labels": [
+ "ruby",
+ "tests"
+ ],
+ "work_in_progress": false,
+ "milestone": {
+ "id": 13,
+ "iid": 3,
+ "project_id": 6,
+ "title": "v2.0",
+ "description": "Qui aut qui eos dolor beatae itaque tempore molestiae.",
+ "state": "active",
+ "created_at": "2017-09-05T07:58:29.099Z",
+ "updated_at": "2017-09-05T07:58:29.099Z",
+ "due_date": null,
+ "start_date": null
+ },
+ "merge_when_pipeline_succeeds": false,
+ "merge_status": "can_be_merged",
+ "sha": "78765a2d5e0a43585945c58e61ba2f822e4d090b",
+ "merge_commit_sha": null,
+ "user_notes_count": 0,
+ "discussion_locked": null,
+ "should_remove_source_branch": null,
+ "force_remove_source_branch": true,
+ "web_url": "http://localhost:3000/twitter/flight/merge_requests/8",
+ "time_stats": {
+ "time_estimate": 0,
+ "total_time_spent": 0,
+ "human_time_estimate": null,
+ "human_total_time_spent": null
+ }
+ }
+]
+```
+
+### Scope: milestones
+
+```bash
+curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/search?scope=milestones&search=release
+```
+
+Example response:
+
+```json
+[
+ {
+ "id": 44,
+ "iid": 1,
+ "project_id": 12,
+ "title": "next release",
+ "description": "Next release milestone",
+ "state": "active",
+ "created_at": "2018-02-06T12:43:39.271Z",
+ "updated_at": "2018-02-06T12:44:01.298Z",
+ "due_date": "2018-04-18",
+ "start_date": "2018-02-04"
+ }
+]
+```
+
+### Scope: snippet_titles
+
+```bash
+curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/search?scope=snippet_titles&search=sample
+```
+
+Example response:
+
+```json
+[
+ {
+ "id": 50,
+ "title": "Sample file",
+ "file_name": "file.rb",
+ "description": "Simple ruby file",
+ "author": {
+ "id": 1,
+ "name": "Administrator",
+ "username": "root",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
+ "web_url": "http://localhost:3000/root"
+ },
+ "updated_at": "2018-02-06T12:49:29.104Z",
+ "created_at": "2017-11-28T08:20:18.071Z",
+ "project_id": 9,
+ "web_url": "http://localhost:3000/root/jira-test/snippets/50"
+ }
+]
+```
+
+### Scope: snippet_blobs
+
+```bash
+curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/search?scope=snippet_blos&search=test
+```
+
+Example response:
+
+```json
+[
+ {
+ "id": 50,
+ "title": "Sample file",
+ "file_name": "file.rb",
+ "description": "Simple ruby file",
+ "author": {
+ "id": 1,
+ "name": "Administrator",
+ "username": "root",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
+ "web_url": "http://localhost:3000/root"
+ },
+ "updated_at": "2018-02-06T12:49:29.104Z",
+ "created_at": "2017-11-28T08:20:18.071Z",
+ "project_id": 9,
+ "web_url": "http://localhost:3000/root/jira-test/snippets/50"
+ }
+]
+```
+
+
+## Group Search API
+
+Search within the specified group.
+
+If a user is not a member of a group and the group is private, a `GET` request on that group will result to a `404` status code.
+
+```
+GET /groups/:id/-/search
+```
+
+| Attribute | Type | Required | Description |
+| ------------------- | ---------------- | ---------- | ---------------------------------------------------------------------------------------|
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](README.md#namespaced-path-encoding) owned by the authenticated user |
+| `scope` | string | yes | The scope to search in |
+| `search` | string | yes | The search query |
+
+Search the expression within the specified scope. Currently these scopes are supported: projects, issues, merge_requests, milestones.
+
+The response depends on the requested scope.
+
+### Scope: projects
+
+```bash
+curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/groups/3/-/search?scope=projects&search=flight
+```
+
+Example response:
+
+```json
+[
+ {
+ "id": 6,
+ "description": "Nobis sed ipsam vero quod cupiditate veritatis hic.",
+ "name": "Flight",
+ "name_with_namespace": "Twitter / Flight",
+ "path": "flight",
+ "path_with_namespace": "twitter/flight",
+ "created_at": "2017-09-05T07:58:01.621Z",
+ "default_branch": "master",
+ "tag_list":[],
+ "ssh_url_to_repo": "ssh://jarka@localhost:2222/twitter/flight.git",
+ "http_url_to_repo": "http://localhost:3000/twitter/flight.git",
+ "web_url": "http://localhost:3000/twitter/flight",
+ "avatar_url": null,
+ "star_count": 0,
+ "forks_count": 0,
+ "last_activity_at": "2018-01-31T09:56:30.902Z"
+ }
+]
+```
+
+### Scope: issues
+
+```bash
+curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/groups/3/-/search?scope=issues&search=file
+```
+
+Example response:
+
+```json
+[
+ {
+ "id": 83,
+ "iid": 1,
+ "project_id": 12,
+ "title": "Add file",
+ "description": "Add first file",
+ "state": "opened",
+ "created_at": "2018-01-24T06:02:15.514Z",
+ "updated_at": "2018-02-06T12:36:23.263Z",
+ "closed_at": null,
+ "labels":[],
+ "milestone": null,
+ "assignees": [{
+ "id": 20,
+ "name": "Ceola Deckow",
+ "username": "sammy.collier",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/c23d85a4f50e0ea76ab739156c639231?s=80&d=identicon",
+ "web_url": "http://localhost:3000/sammy.collier"
+ }],
+ "author": {
+ "id": 1,
+ "name": "Administrator",
+ "username": "root",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
+ "web_url": "http://localhost:3000/root"
+ },
+ "assignee": {
+ "id": 20,
+ "name": "Ceola Deckow",
+ "username": "sammy.collier",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/c23d85a4f50e0ea76ab739156c639231?s=80&d=identicon",
+ "web_url": "http://localhost:3000/sammy.collier"
+ },
+ "user_notes_count": 0,
+ "upvotes": 0,
+ "downvotes": 0,
+ "due_date": null,
+ "confidential": false,
+ "discussion_locked": null,
+ "web_url": "http://localhost:3000/h5bp/7bp/subgroup-prj/issues/1",
+ "time_stats": {
+ "time_estimate": 0,
+ "total_time_spent": 0,
+ "human_time_estimate": null,
+ "human_total_time_spent": null
+ }
+ }
+]
+```
+
+**Note**: `assignee` column is deprecated, now we show it as a single-sized array `assignees` to conform to the GitLab EE API.
+
+### Scope: merge_requests
+
+```bash
+curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/groups/3/-/search?scope=merge_requests&search=file
+```
+
+Example response:
+
+```json
+[
+ {
+ "id": 56,
+ "iid": 8,
+ "project_id": 6,
+ "title": "Add first file",
+ "description": "This is a test MR to add file",
+ "state": "opened",
+ "created_at": "2018-01-22T14:21:50.830Z",
+ "updated_at": "2018-02-06T12:40:33.295Z",
+ "target_branch": "master",
+ "source_branch": "jaja-test",
+ "upvotes": 0,
+ "downvotes": 0,
+ "author": {
+ "id": 1,
+ "name": "Administrator",
+ "username": "root",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
+ "web_url": "http://localhost:3000/root"
+ },
+ "assignee": {
+ "id": 5,
+ "name": "Jacquelyn Kutch",
+ "username": "abigail",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/3138c66095ee4bd11a508c2f7f7772da?s=80&d=identicon",
+ "web_url": "http://localhost:3000/abigail"
+ },
+ "source_project_id": 6,
+ "target_project_id": 6,
+ "labels": [
+ "ruby",
+ "tests"
+ ],
+ "work_in_progress": false,
+ "milestone": {
+ "id": 13,
+ "iid": 3,
+ "project_id": 6,
+ "title": "v2.0",
+ "description": "Qui aut qui eos dolor beatae itaque tempore molestiae.",
+ "state": "active",
+ "created_at": "2017-09-05T07:58:29.099Z",
+ "updated_at": "2017-09-05T07:58:29.099Z",
+ "due_date": null,
+ "start_date": null
+ },
+ "merge_when_pipeline_succeeds": false,
+ "merge_status": "can_be_merged",
+ "sha": "78765a2d5e0a43585945c58e61ba2f822e4d090b",
+ "merge_commit_sha": null,
+ "user_notes_count": 0,
+ "discussion_locked": null,
+ "should_remove_source_branch": null,
+ "force_remove_source_branch": true,
+ "web_url": "http://localhost:3000/twitter/flight/merge_requests/8",
+ "time_stats": {
+ "time_estimate": 0,
+ "total_time_spent": 0,
+ "human_time_estimate": null,
+ "human_total_time_spent": null
+ }
+ }
+]
+```
+
+### Scope: milestones
+
+```bash
+curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/groups/3/-/search?scope=milestones&search=release
+```
+
+Example response:
+
+```json
+[
+ {
+ "id": 44,
+ "iid": 1,
+ "project_id": 12,
+ "title": "next release",
+ "description": "Next release milestone",
+ "state": "active",
+ "created_at": "2018-02-06T12:43:39.271Z",
+ "updated_at": "2018-02-06T12:44:01.298Z",
+ "due_date": "2018-04-18",
+ "start_date": "2018-02-04"
+ }
+]
+```
+
+## Project Search API
+
+Search within the specified project.
+
+If a user is not a member of a project and the project is private, a `GET` request on that project will result to a `404` status code.
+
+```
+GET /projects/:id/-/search
+```
+
+| Attribute | Type | Required | Description |
+| ------------------- | ---------------- | ---------- | ---------------------------------------------------------------------------------------|
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
+| `scope` | string | yes | The scope to search in |
+| `search` | string | yes | The search query |
+
+Search the expression within the specified scope. Currently these scopes are supported: issues, merge_requests, milestones, notes, wiki_blobs, commits, blobs.
+
+The response depends on the requested scope.
+
+
+### Scope: issues
+
+```bash
+curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/12/-/search?scope=issues&search=file
+```
+
+Example response:
+
+```json
+[
+ {
+ "id": 83,
+ "iid": 1,
+ "project_id": 12,
+ "title": "Add file",
+ "description": "Add first file",
+ "state": "opened",
+ "created_at": "2018-01-24T06:02:15.514Z",
+ "updated_at": "2018-02-06T12:36:23.263Z",
+ "closed_at": null,
+ "labels":[],
+ "milestone": null,
+ "assignees": [{
+ "id": 20,
+ "name": "Ceola Deckow",
+ "username": "sammy.collier",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/c23d85a4f50e0ea76ab739156c639231?s=80&d=identicon",
+ "web_url": "http://localhost:3000/sammy.collier"
+ }],
+ "author": {
+ "id": 1,
+ "name": "Administrator",
+ "username": "root",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
+ "web_url": "http://localhost:3000/root"
+ },
+ "assignee": {
+ "id": 20,
+ "name": "Ceola Deckow",
+ "username": "sammy.collier",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/c23d85a4f50e0ea76ab739156c639231?s=80&d=identicon",
+ "web_url": "http://localhost:3000/sammy.collier"
+ },
+ "user_notes_count": 0,
+ "upvotes": 0,
+ "downvotes": 0,
+ "due_date": null,
+ "confidential": false,
+ "discussion_locked": null,
+ "web_url": "http://localhost:3000/h5bp/7bp/subgroup-prj/issues/1",
+ "time_stats": {
+ "time_estimate": 0,
+ "total_time_spent": 0,
+ "human_time_estimate": null,
+ "human_total_time_spent": null
+ }
+ }
+]
+```
+
+**Note**: `assignee` column is deprecated, now we show it as a single-sized array `assignees` to conform to the GitLab EE API.
+
+### Scope: merge_requests
+
+```bash
+curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/6/-/search?scope=merge_requests&search=file
+```
+
+Example response:
+
+```json
+[
+ {
+ "id": 56,
+ "iid": 8,
+ "project_id": 6,
+ "title": "Add first file",
+ "description": "This is a test MR to add file",
+ "state": "opened",
+ "created_at": "2018-01-22T14:21:50.830Z",
+ "updated_at": "2018-02-06T12:40:33.295Z",
+ "target_branch": "master",
+ "source_branch": "jaja-test",
+ "upvotes": 0,
+ "downvotes": 0,
+ "author": {
+ "id": 1,
+ "name": "Administrator",
+ "username": "root",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
+ "web_url": "http://localhost:3000/root"
+ },
+ "assignee": {
+ "id": 5,
+ "name": "Jacquelyn Kutch",
+ "username": "abigail",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/3138c66095ee4bd11a508c2f7f7772da?s=80&d=identicon",
+ "web_url": "http://localhost:3000/abigail"
+ },
+ "source_project_id": 6,
+ "target_project_id": 6,
+ "labels": [
+ "ruby",
+ "tests"
+ ],
+ "work_in_progress": false,
+ "milestone": {
+ "id": 13,
+ "iid": 3,
+ "project_id": 6,
+ "title": "v2.0",
+ "description": "Qui aut qui eos dolor beatae itaque tempore molestiae.",
+ "state": "active",
+ "created_at": "2017-09-05T07:58:29.099Z",
+ "updated_at": "2017-09-05T07:58:29.099Z",
+ "due_date": null,
+ "start_date": null
+ },
+ "merge_when_pipeline_succeeds": false,
+ "merge_status": "can_be_merged",
+ "sha": "78765a2d5e0a43585945c58e61ba2f822e4d090b",
+ "merge_commit_sha": null,
+ "user_notes_count": 0,
+ "discussion_locked": null,
+ "should_remove_source_branch": null,
+ "force_remove_source_branch": true,
+ "web_url": "http://localhost:3000/twitter/flight/merge_requests/8",
+ "time_stats": {
+ "time_estimate": 0,
+ "total_time_spent": 0,
+ "human_time_estimate": null,
+ "human_total_time_spent": null
+ }
+ }
+]
+```
+
+### Scope: milestones
+
+```bash
+curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/12/-/search?scope=milestones&search=release
+```
+
+Example response:
+
+```json
+[
+ {
+ "id": 44,
+ "iid": 1,
+ "project_id": 12,
+ "title": "next release",
+ "description": "Next release milestone",
+ "state": "active",
+ "created_at": "2018-02-06T12:43:39.271Z",
+ "updated_at": "2018-02-06T12:44:01.298Z",
+ "due_date": "2018-04-18",
+ "start_date": "2018-02-04"
+ }
+]
+```
+
+### Scope: notes
+
+```bash
+curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/6/-/search?scope=notes&search=maxime
+```
+
+Example response:
+
+```json
+[
+ {
+ "id": 191,
+ "body": "Harum maxime consequuntur et et deleniti assumenda facilis.",
+ "attachment": null,
+ "author": {
+ "id": 23,
+ "name": "User 1",
+ "username": "user1",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/111d68d06e2d317b5a59c2c6c5bad808?s=80&d=identicon",
+ "web_url": "http://localhost:3000/user1"
+ },
+ "created_at": "2017-09-05T08:01:32.068Z",
+ "updated_at": "2017-09-05T08:01:32.068Z",
+ "system": false,
+ "noteable_id": 22,
+ "noteable_type": "Issue",
+ "noteable_iid": 2
+ }
+]
+```
+
+### Scope: wiki_blobs
+
+```bash
+curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/6/-/search?scope=wiki_blobs&search=bye
+```
+
+Example response:
+
+```json
+
+[
+ {
+ "basename": "home",
+ "data": "hello\n\nand bye\n\nend",
+ "filename": "home.md",
+ "id": null,
+ "ref": "master",
+ "startline": 5,
+ "project_id": 6
+ }
+]
+```
+
+### Scope: commits
+
+```bash
+curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/6/-/search?scope=commits&search=bye
+```
+
+Example response:
+
+```json
+
+[
+ {
+ "id": "4109c2d872d5fdb1ed057400d103766aaea97f98",
+ "short_id": "4109c2d8",
+ "title": "goodbye $.browser",
+ "created_at": "2013-02-18T22:02:54.000Z",
+ "parent_ids": [
+ "59d05353ab575bcc2aa958fe1782e93297de64c9"
+ ],
+ "message": "goodbye $.browser\n",
+ "author_name": "angus croll",
+ "author_email": "anguscroll@gmail.com",
+ "authored_date": "2013-02-18T22:02:54.000Z",
+ "committer_name": "angus croll",
+ "committer_email": "anguscroll@gmail.com",
+ "committed_date": "2013-02-18T22:02:54.000Z",
+ "project_id": 6
+ }
+]
+```
+
+### Scope: blobs
+
+```bash
+curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/6/-/search?scope=blobs&search=installation
+```
+
+Example response:
+
+```json
+
+[
+ {
+ "basename": "README",
+ "data": "```\n\n## Installation\n\nQuick start using the [pre-built",
+ "filename": "README.md",
+ "id": null,
+ "ref": "master",
+ "startline": 46,
+ "project_id": 6
+ }
+]
+```
+
+[ce-41763]: https://gitlab.com/gitlab-org/gitlab-ce/issues/41763
diff --git a/doc/api/users.md b/doc/api/users.md
index 2082e45756a..a4447e32908 100644
--- a/doc/api/users.md
+++ b/doc/api/users.md
@@ -165,6 +165,12 @@ You can filter by [custom attributes](custom_attributes.md) with:
GET /users?custom_attributes[key]=value&custom_attributes[other_key]=other_value
```
+You can include the users' [custom attributes](custom_attributes.md) in the response with:
+
+```
+GET /users?with_custom_attributes=true
+```
+
## Single user
Get a single user.
@@ -245,6 +251,12 @@ Parameters:
}
```
+You can include the user's [custom attributes](custom_attributes.md) in the response with:
+
+```
+GET /users/:id?with_custom_attributes=true
+```
+
## User creation
Creates a new user. Note only administrators can create new users. Either `password` or `reset_password` should be specified (`reset_password` takes priority).