1206 lines
34 KiB
Markdown
1206 lines
34 KiB
Markdown
---
|
|
stage: Data Stores
|
|
group: Global Search
|
|
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
|
---
|
|
|
|
# Search API **(FREE)**
|
|
|
|
> [Feature flag `search_filter_by_confidential` removed](https://gitlab.com/gitlab-org/gitlab/-/issues/244923) in GitLab 13.6.
|
|
|
|
Every API call to search must be authenticated.
|
|
|
|
## Additional scopes **(PREMIUM)**
|
|
|
|
Additional scopes are available for the [Advanced Search API](#advanced-search-api)
|
|
and [Group Search API](#group-search-api) if
|
|
[Elasticsearch is enabled](../integration/advanced_search/elasticsearch.md):
|
|
`blobs`, `commits`, `notes`, `wiki_blobs`.
|
|
|
|
## Advanced Search API
|
|
|
|
Search for an expression globally across the GitLab instance, in a specified scope.
|
|
The response depends on the requested scope.
|
|
|
|
```plaintext
|
|
GET /search
|
|
```
|
|
|
|
| Attribute | Type | Required | Description |
|
|
| ------------- | -------- | ---------- | ------------|
|
|
| `scope` | string | Yes | The scope to search in. Values include `projects`, `issues`, `merge_requests`, `milestones`, `snippet_titles`, `users`. [Additional scopes](#additional-scopes): `blobs`, `commits`, `notes`, `wiki_blobs`. |
|
|
| `search` | string | Yes | The search query. |
|
|
| `confidential` | boolean | No | Filter by confidentiality. Supports `issues` scope; other scopes are ignored. |
|
|
| `order_by` | string | No | Allowed values are `created_at` only. If not set, results are sorted by `created_at` in descending order for basic search, or by the most relevant documents for advanced search.|
|
|
| `sort` | string | No | Allowed values are `asc` or `desc` only. If not set, results are sorted by `created_at` in descending order for basic search, or by the most relevant documents for advanced search.|
|
|
| `state` | string | No | Filter by state. Supports `issues` and `merge_requests` scopes; other scopes are ignored. |
|
|
|
|
### Scope: `projects`
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "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":[], //deprecated, use `topics` instead
|
|
"topics":[],
|
|
"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",
|
|
"readme_url": "http://localhost:3000/twitter/flight/-/blob/master/README.md",
|
|
"avatar_url": null,
|
|
"star_count": 0,
|
|
"forks_count": 0,
|
|
"last_activity_at": "2018-01-31T09:56:30.902Z"
|
|
}
|
|
]
|
|
```
|
|
|
|
### Scope: `issues`
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "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:
|
|
The `assignee` column is deprecated. It is shown as a single-sized array `assignees` to conform to the GitLab EE API.
|
|
|
|
### Scope: `merge_requests`
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "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"
|
|
],
|
|
"draft": false,
|
|
"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,
|
|
"squash_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`
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "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`
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "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: `wiki_blobs` **(PREMIUM)**
|
|
|
|
> Moved to GitLab Premium in 13.9.
|
|
|
|
This scope is available only if [Elasticsearch](../integration/advanced_search/elasticsearch.md) is enabled.
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/search?scope=wiki_blobs&search=bye"
|
|
```
|
|
|
|
Example response:
|
|
|
|
```json
|
|
|
|
[
|
|
{
|
|
"basename": "home",
|
|
"data": "hello\n\nand bye\n\nend",
|
|
"path": "home.md",
|
|
"filename": "home.md",
|
|
"id": null,
|
|
"ref": "master",
|
|
"startline": 5,
|
|
"project_id": 6
|
|
}
|
|
]
|
|
```
|
|
|
|
NOTE:
|
|
`filename` is deprecated in favor of `path`. Both return the full path of the file inside the repository, but in the future `filename` is intended to be only the filename and not the full path. For details, see [issue 34521](https://gitlab.com/gitlab-org/gitlab/-/issues/34521).
|
|
|
|
### Scope: commits **(PREMIUM)**
|
|
|
|
> Moved to GitLab Premium in 13.9.
|
|
|
|
This scope is available only if [Elasticsearch](../integration/advanced_search/elasticsearch.md) is enabled.
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/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 **(PREMIUM)**
|
|
|
|
> Moved to GitLab Premium in 13.9.
|
|
|
|
This scope is available only if [Elasticsearch](../integration/advanced_search/elasticsearch.md) is enabled.
|
|
|
|
Filters are available for this scope:
|
|
|
|
- filename
|
|
- path
|
|
- extension
|
|
|
|
To use a filter, include it in your query. For example: `a query filename:some_name*`.
|
|
|
|
You may use wildcards (`*`) to use glob matching.
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/search?scope=blobs&search=installation"
|
|
```
|
|
|
|
Example response:
|
|
|
|
```json
|
|
|
|
[
|
|
{
|
|
"basename": "README",
|
|
"data": "```\n\n## Installation\n\nQuick start using the [pre-built",
|
|
"path": "README.md",
|
|
"filename": "README.md",
|
|
"id": null,
|
|
"ref": "master",
|
|
"startline": 46,
|
|
"project_id": 6
|
|
}
|
|
]
|
|
```
|
|
|
|
NOTE:
|
|
`filename` is deprecated in favor of `path`. Both return the full path of the file inside the repository, but in the future `filename` is intended to be only the filename and not the full path. For details, see [issue 34521](https://gitlab.com/gitlab-org/gitlab/-/issues/34521).
|
|
|
|
### Scope: notes **(PREMIUM)**
|
|
|
|
> Moved to GitLab Premium in 13.9.
|
|
|
|
This scope is available only if [Elasticsearch](../integration/advanced_search/elasticsearch.md) is enabled.
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "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",
|
|
"project_id": 6,
|
|
"noteable_iid": 2
|
|
}
|
|
]
|
|
```
|
|
|
|
### Scope: users
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/search?scope=users&search=doe"
|
|
```
|
|
|
|
Example response:
|
|
|
|
```json
|
|
[
|
|
{
|
|
"id": 1,
|
|
"name": "John Doe1",
|
|
"username": "user1",
|
|
"state": "active",
|
|
"avatar_url": "http://www.gravatar.com/avatar/c922747a93b40d1ea88262bf1aebee62?s=80&d=identicon",
|
|
"web_url": "http://localhost/user1"
|
|
}
|
|
]
|
|
```
|
|
|
|
## Group Search API
|
|
|
|
Search for an expression in the specified group.
|
|
|
|
If a user is not a member of a group and the group is private, a `GET` request on that group results in a `404 Not Found` status code.
|
|
|
|
```plaintext
|
|
GET /groups/:id/search
|
|
```
|
|
|
|
| Attribute | Type | Required | Description |
|
|
| --------- | ---- | -------- | -------------|
|
|
| `id` | integer or string | Yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-path-encoding) owned by the authenticated user. |
|
|
| `scope` | string | Yes | The scope to search in. Values include `issues`, `merge_requests`, `milestones`, `projects`, `users`. [Additional scopes](#additional-scopes): `blobs`, `commits`, `notes`, `wiki_blobs`. |
|
|
| `search` | string | Yes | The search query. |
|
|
| `confidential` | boolean | No | Filter by confidentiality. Supports only `issues` scope; other scopes are ignored. |
|
|
| `order_by` | string | No | Allowed values are `created_at` only. If not set, results are sorted by `created_at` in descending order for basic search, or by the most relevant documents for advanced search.|
|
|
| `sort` | string | No | Allowed values are `asc` or `desc` only. If not set, results are sorted by `created_at` in descending order for basic search, or by the most relevant documents for advanced search.|
|
|
| `state` | string | No | Filter by state. Supports `issues` and `merge_requests` only; other scopes are ignored. |
|
|
|
|
The response depends on the requested scope.
|
|
|
|
### Scope: `projects`
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "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":[], //deprecated, use `topics` instead
|
|
"topics":[],
|
|
"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",
|
|
"readme_url": "http://localhost:3000/twitter/flight/-/blob/master/README.md",
|
|
"avatar_url": null,
|
|
"star_count": 0,
|
|
"forks_count": 0,
|
|
"last_activity_at": "2018-01-31T09:56:30.902Z"
|
|
}
|
|
]
|
|
```
|
|
|
|
### Scope: `issues`
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "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`
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "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"
|
|
],
|
|
"draft": false,
|
|
"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,
|
|
"squash_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`
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "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"
|
|
}
|
|
]
|
|
```
|
|
|
|
### Scope: `wiki_blobs` **(PREMIUM)**
|
|
|
|
> Moved to GitLab Premium in 13.9.
|
|
|
|
This scope is available only if [Elasticsearch](../integration/advanced_search/elasticsearch.md) is enabled.
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/6/search?scope=wiki_blobs&search=bye"
|
|
```
|
|
|
|
Example response:
|
|
|
|
```json
|
|
|
|
[
|
|
{
|
|
"basename": "home",
|
|
"data": "hello\n\nand bye\n\nend",
|
|
"path": "home.md",
|
|
"filename": "home.md",
|
|
"id": null,
|
|
"ref": "master",
|
|
"startline": 5,
|
|
"project_id": 6
|
|
}
|
|
]
|
|
```
|
|
|
|
NOTE:
|
|
`filename` is deprecated in favor of `path`. Both return the full path of the file inside the repository, but in the future `filename` is intended to be only the filename and not the full path. For details, see [issue 34521](https://gitlab.com/gitlab-org/gitlab/-/issues/34521).
|
|
|
|
### Scope: `commits` **(PREMIUM)**
|
|
|
|
> Moved to GitLab Premium in 13.9.
|
|
|
|
This scope is available only if [Elasticsearch](../integration/advanced_search/elasticsearch.md) is enabled.
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/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` **(PREMIUM)**
|
|
|
|
> Moved to GitLab Premium in 13.9.
|
|
|
|
This scope is available only if [Elasticsearch](../integration/advanced_search/elasticsearch.md) is enabled.
|
|
|
|
Filters are available for this scope:
|
|
|
|
- filename
|
|
- path
|
|
- extension
|
|
|
|
To use a filter, include it in your query. For example: `a query filename:some_name*`.
|
|
|
|
You may use wildcards (`*`) to use glob matching.
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/6/search?scope=blobs&search=installation"
|
|
```
|
|
|
|
Example response:
|
|
|
|
```json
|
|
|
|
[
|
|
{
|
|
"basename": "README",
|
|
"data": "```\n\n## Installation\n\nQuick start using the [pre-built",
|
|
"path": "README.md",
|
|
"filename": "README.md",
|
|
"id": null,
|
|
"ref": "master",
|
|
"startline": 46,
|
|
"project_id": 6
|
|
}
|
|
]
|
|
```
|
|
|
|
NOTE:
|
|
`filename` is deprecated in favor of `path`. Both return the full path of the file inside the repository, but in the future `filename` is intended to be only the filename and not the full path. For details, see [issue 34521](https://gitlab.com/gitlab-org/gitlab/-/issues/34521).
|
|
|
|
### Scope: `notes` **(PREMIUM)**
|
|
|
|
> Moved to GitLab Premium in 13.9.
|
|
|
|
This scope is available only if [Elasticsearch](../integration/advanced_search/elasticsearch.md) is enabled.
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "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",
|
|
"project_id": 6,
|
|
"noteable_iid": 2
|
|
}
|
|
]
|
|
```
|
|
|
|
### Scope: `users`
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/3/search?scope=users&search=doe"
|
|
```
|
|
|
|
Example response:
|
|
|
|
```json
|
|
[
|
|
{
|
|
"id": 1,
|
|
"name": "John Doe1",
|
|
"username": "user1",
|
|
"state": "active",
|
|
"avatar_url": "http://www.gravatar.com/avatar/c922747a93b40d1ea88262bf1aebee62?s=80&d=identicon",
|
|
"web_url": "http://localhost/user1"
|
|
}
|
|
]
|
|
```
|
|
|
|
## Project Search API
|
|
|
|
Search for an expression in the specified project.
|
|
|
|
If a user is not a member of a project and the project is private, a `GET` request on that project results in a `404` status code.
|
|
|
|
```plaintext
|
|
GET /projects/:id/search
|
|
```
|
|
|
|
| Attribute | Type | Required | Description |
|
|
| --------- | ---- | -------- | ------------|
|
|
| `id` | integer or string | Yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-path-encoding) owned by the authenticated user. |
|
|
| `scope` | string | Yes | The scope to search in. Values include `blobs`, `commits`, `issues`, `merge_requests`, `milestones`, `notes`, `users`, and `wiki_blobs`. |
|
|
| `search` | string | Yes | The search query. |
|
|
| `confidential` | boolean | No | Filter by confidentiality. Supports `issues` scope; other scopes are ignored. |
|
|
| `ref` | string | No | The name of a repository branch or tag to search on. The project's default branch is used by default. Applicable only for scopes `blobs`, `commits`, and `wiki_blobs`. |
|
|
| `order_by` | string | No | Allowed values are `created_at` only. If not set, results are sorted by `created_at` in descending order for basic search, or by the most relevant documents for advanced search.|
|
|
| `sort` | string | No | Allowed values are `asc` or `desc` only. If not set, results are sorted by `created_at` in descending order for basic search, or by the most relevant documents for advanced search.|
|
|
| `state` | string | No | Filter by state. Supports the `issues` and `merge_requests` scopes; other scopes are ignored. |
|
|
|
|
The response depends on the requested scope.
|
|
|
|
### Scope: `issues`
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "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`
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "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"
|
|
],
|
|
"draft": false,
|
|
"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,
|
|
"squash_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`
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "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` **(PREMIUM)**
|
|
|
|
> Moved to GitLab Premium in 13.9.
|
|
|
|
This scope is available only if [Elasticsearch](../integration/advanced_search/elasticsearch.md) is enabled.
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "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",
|
|
"project_id": 6,
|
|
"noteable_iid": 2
|
|
}
|
|
]
|
|
```
|
|
|
|
### Scope: `wiki_blobs` **(PREMIUM)**
|
|
|
|
> Moved to GitLab Premium in 13.9.
|
|
|
|
This scope is available only if [Elasticsearch](../integration/advanced_search/elasticsearch.md) is enabled.
|
|
|
|
Filters are available for this scope:
|
|
|
|
- filename
|
|
- path
|
|
- extension
|
|
|
|
To use a filter, include it in your query. For example: `a query filename:some_name*`.
|
|
You may use wildcards (`*`) to use glob matching.
|
|
|
|
Wiki blobs searches are performed on both filenames and contents. Search
|
|
results:
|
|
|
|
- Found in filenames are displayed before results found in contents.
|
|
- May contain multiple matches for the same blob because the search string
|
|
might be found in both the filename and content, or might appear multiple
|
|
times in the content.
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "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",
|
|
"path": "home.md",
|
|
"filename": "home.md",
|
|
"id": null,
|
|
"ref": "master",
|
|
"startline": 5,
|
|
"project_id": 6
|
|
}
|
|
]
|
|
```
|
|
|
|
NOTE:
|
|
`filename` is deprecated in favor of `path`. Both return the full path of the file inside the repository, but in the future `filename` are intended to be only the filename and not the full path. For details, see [issue 34521](https://gitlab.com/gitlab-org/gitlab/-/issues/34521).
|
|
|
|
### Scope: `commits` **(PREMIUM)**
|
|
|
|
> Moved to GitLab Premium in 13.9.
|
|
|
|
This scope is available only if [Elasticsearch](../integration/advanced_search/elasticsearch.md) is enabled.
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "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` **(PREMIUM)**
|
|
|
|
> Moved to GitLab Premium in 13.9.
|
|
|
|
This scope is available only if [Elasticsearch](../integration/advanced_search/elasticsearch.md) is enabled.
|
|
|
|
Filters are available for this scope:
|
|
|
|
- Filename
|
|
- Path
|
|
- Extension
|
|
|
|
To use a filter, include it in your query. For example: `a query filename:some_name*`.
|
|
You may use wildcards (`*`) to use glob matching.
|
|
|
|
Blobs searches are performed on both filenames and contents. Search results:
|
|
|
|
- Found in filenames are displayed before results found in contents.
|
|
- May contain multiple matches for the same blob because the search string
|
|
might be found in both the filename and content, or might appear multiple
|
|
times in the content.
|
|
|
|
```shell
|
|
curl --request GET --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/projects/6/search?scope=blobs&search=keyword%20filename:*.py
|
|
```
|
|
|
|
Example response:
|
|
|
|
```json
|
|
|
|
[
|
|
{
|
|
"basename": "README",
|
|
"data": "```\n\n## Installation\n\nQuick start using the [pre-built",
|
|
"path": "README.md",
|
|
"filename": "README.md",
|
|
"id": null,
|
|
"ref": "master",
|
|
"startline": 46,
|
|
"project_id": 6
|
|
}
|
|
]
|
|
```
|
|
|
|
NOTE:
|
|
`filename` is deprecated in favor of `path`. Both return the full path of the file inside the repository, but in the future `filename` is intended to be only the filename and not the full path. For details, see [issue 34521](https://gitlab.com/gitlab-org/gitlab/-/issues/34521).
|
|
|
|
### Scope: `users`
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/6/search?scope=users&search=doe"
|
|
```
|
|
|
|
Example response:
|
|
|
|
```json
|
|
[
|
|
{
|
|
"id": 1,
|
|
"name": "John Doe1",
|
|
"username": "user1",
|
|
"state": "active",
|
|
"avatar_url": "http://www.gravatar.com/avatar/c922747a93b40d1ea88262bf1aebee62?s=80&d=identicon",
|
|
"web_url": "http://localhost/user1"
|
|
}
|
|
]
|
|
```
|