2020-07-14 20:09:23 -04:00
---
stage: Release
2020-12-01 10:09:28 -05:00
group: Release
2020-11-26 01:09:20 -05:00
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
2020-07-14 20:09:23 -04:00
---
2021-02-05 10:09:28 -05:00
# Deploy keys API
2013-06-06 06:19:23 -04:00
2016-06-01 22:25:22 -04:00
## List all deploy keys
2021-02-15 19:09:01 -05:00
Get a list of all deploy keys across all projects of the GitLab instance. This endpoint requires administrator access and is not available on GitLab.com.
2016-06-01 22:25:22 -04:00
2020-02-27 04:09:01 -05:00
```plaintext
2016-06-01 22:25:22 -04:00
GET /deploy_keys
```
2020-01-30 10:09:15 -05:00
```shell
2018-12-27 04:03:08 -05:00
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/deploy_keys"
2016-06-01 22:25:22 -04:00
```
Example response:
```json
[
{
"id": 1,
"title": "Public key",
2019-07-08 23:28:41 -04:00
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",
2016-06-01 22:25:22 -04:00
"created_at": "2013-10-02T10:12:29Z"
},
{
"id": 3,
"title": "Another Public key",
2019-07-08 23:28:41 -04:00
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",
2016-06-01 22:25:22 -04:00
"created_at": "2013-10-02T11:12:29Z"
}
]
```
## List project deploy keys
2013-06-06 06:19:23 -04:00
Get a list of a project's deploy keys.
2020-02-27 04:09:01 -05:00
```plaintext
2016-06-01 22:25:22 -04:00
GET /projects/:id/deploy_keys
2013-06-06 06:19:23 -04:00
```
2016-01-18 03:16:14 -05:00
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
2017-04-08 05:21:11 -04:00
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user |
2016-01-18 03:16:14 -05:00
2020-01-30 10:09:15 -05:00
```shell
2018-12-27 04:03:08 -05:00
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/5/deploy_keys"
2016-01-18 03:16:14 -05:00
```
2013-06-06 06:19:23 -04:00
2016-01-18 03:16:14 -05:00
Example response:
2013-06-06 06:19:23 -04:00
```json
[
{
"id": 1,
2014-04-05 02:36:47 -04:00
"title": "Public key",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",
2018-01-05 10:23:44 -05:00
"created_at": "2013-10-02T10:12:29Z",
"can_push": false
2013-06-06 06:19:23 -04:00
},
{
"id": 3,
2014-04-05 02:36:47 -04:00
"title": "Another Public key",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",
2018-01-05 10:23:44 -05:00
"created_at": "2013-10-02T11:12:29Z",
"can_push": false
2013-06-06 06:19:23 -04:00
}
]
```
2014-04-24 18:48:22 -04:00
## Single deploy key
2013-06-06 06:19:23 -04:00
Get a single key.
2020-02-27 04:09:01 -05:00
```plaintext
2016-06-01 22:25:22 -04:00
GET /projects/:id/deploy_keys/:key_id
2013-06-06 06:19:23 -04:00
```
Parameters:
2016-01-18 03:16:14 -05:00
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
2017-04-08 05:21:11 -04:00
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user |
2016-01-18 03:16:14 -05:00
| `key_id` | integer | yes | The ID of the deploy key |
2020-01-30 10:09:15 -05:00
```shell
2018-12-27 04:03:08 -05:00
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/5/deploy_keys/11"
2016-01-18 03:16:14 -05:00
```
Example response:
2013-06-06 06:19:23 -04:00
```json
{
"id": 1,
2014-04-05 02:36:47 -04:00
"title": "Public key",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",
2018-01-05 10:23:44 -05:00
"created_at": "2013-10-02T10:12:29Z",
"can_push": false
2013-06-06 06:19:23 -04:00
}
```
2014-04-24 18:48:22 -04:00
## Add deploy key
2013-06-06 06:19:23 -04:00
Creates a new deploy key for a project.
2016-01-18 03:16:14 -05:00
2020-12-17 16:09:57 -05:00
If the deploy key already exists in another project, it's joined to the current
project only if the original one is accessible by the same user.
2013-06-06 06:19:23 -04:00
2020-02-27 04:09:01 -05:00
```plaintext
2016-06-01 22:25:22 -04:00
POST /projects/:id/deploy_keys
2013-06-06 06:19:23 -04:00
```
2016-08-18 03:27:45 -04:00
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
2017-04-08 05:21:11 -04:00
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user |
2016-08-18 03:27:45 -04:00
| `title` | string | yes | New deploy key's title |
| `key` | string | yes | New deploy key |
| `can_push` | boolean | no | Can deploy key push to the project's repository |
2016-01-18 03:16:14 -05:00
2020-01-30 10:09:15 -05:00
```shell
2018-12-27 04:03:08 -05:00
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " --header "Content-Type: application/json" --data '{"title": "My deploy key", "key": "ssh-rsa AAAA...", "can_push": "true"}' "https://gitlab.example.com/api/v4/projects/5/deploy_keys/"
2016-01-18 03:16:14 -05:00
```
2013-06-06 06:19:23 -04:00
2016-01-18 03:16:14 -05:00
Example response:
```json
{
"key" : "ssh-rsa AAAA...",
"id" : 12,
"title" : "My deploy key",
2016-08-18 03:27:45 -04:00
"can_push": true,
2016-01-18 03:16:14 -05:00
"created_at" : "2015-08-29T12:44:31.550Z"
}
```
2013-06-06 06:19:23 -04:00
2018-01-05 10:23:44 -05:00
## Update deploy key
Updates a deploy key for a project.
2020-02-27 04:09:01 -05:00
```plaintext
2018-01-05 10:23:44 -05:00
PUT /projects/:id/deploy_keys/:key_id
```
| 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 |
| `title` | string | no | New deploy key's title |
| `can_push` | boolean | no | Can deploy key push to the project's repository |
2020-01-30 10:09:15 -05:00
```shell
2018-12-27 04:03:08 -05:00
curl --request PUT --header "PRIVATE-TOKEN: < your_access_token > " --header "Content-Type: application/json" --data '{"title": "New deploy key", "can_push": true}' "https://gitlab.example.com/api/v4/projects/5/deploy_keys/11"
2018-01-05 10:23:44 -05:00
```
Example response:
```json
{
"id": 11,
"title": "New deploy key",
"key": "ssh-rsa AAAA...",
"created_at": "2015-08-29T12:44:31.550Z",
"can_push": true
}
```
2014-04-24 18:48:22 -04:00
## Delete deploy key
2013-06-06 06:19:23 -04:00
2020-12-17 16:09:57 -05:00
Removes a deploy key from the project. If the deploy key is used only for this project, it's deleted from the system.
2013-06-06 06:19:23 -04:00
2020-02-27 04:09:01 -05:00
```plaintext
2016-06-01 22:25:22 -04:00
DELETE /projects/:id/deploy_keys/:key_id
2013-06-06 06:19:23 -04:00
```
2016-01-18 03:16:14 -05:00
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
2017-04-08 05:21:11 -04:00
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user |
2016-01-18 03:16:14 -05:00
| `key_id` | integer | yes | The ID of the deploy key |
2020-01-30 10:09:15 -05:00
```shell
2018-12-27 04:03:08 -05:00
curl --request DELETE --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/5/deploy_keys/13"
2016-01-18 03:16:14 -05:00
```
2013-06-06 06:19:23 -04:00
2016-08-03 08:45:32 -04:00
## Enable a deploy key
Enables a deploy key for a project so this can be used. Returns the enabled key, with a status code 201 when successful.
2020-01-30 10:09:15 -05:00
```shell
2020-05-27 20:08:37 -04:00
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/5/deploy_keys/13/enable"
2016-08-03 08:45:32 -04:00
```
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
2017-04-08 05:21:11 -04:00
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user |
2016-08-03 08:45:32 -04:00
| `key_id` | integer | yes | The ID of the deploy key |
Example response:
```json
{
"key" : "ssh-rsa AAAA...",
"id" : 12,
"title" : "My deploy key",
"created_at" : "2015-08-29T12:44:31.550Z"
}
```
2019-08-22 04:50:31 -04:00
2019-08-08 01:45:13 -04:00
## Adding deploy keys to multiple projects
If you want to easily add the same deploy key to multiple projects in the same
group, this can be achieved quite easily with the API.
First, find the ID of the projects you're interested in, by either listing all
projects:
2020-01-30 10:09:15 -05:00
```shell
2020-05-27 20:08:37 -04:00
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects"
2019-08-08 01:45:13 -04:00
```
2019-08-30 02:19:01 -04:00
Or finding the ID of a group:
2019-08-08 01:45:13 -04:00
2020-01-30 10:09:15 -05:00
```shell
2020-05-27 20:08:37 -04:00
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/groups"
2019-08-30 02:19:01 -04:00
```
2019-08-08 01:45:13 -04:00
2019-08-30 02:19:01 -04:00
Then listing all projects in that group (for example, group 1234):
2020-01-30 10:09:15 -05:00
```shell
2020-05-27 20:08:37 -04:00
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/groups/1234"
2019-08-08 01:45:13 -04:00
```
With those IDs, add the same deploy key to all:
2020-01-30 10:09:15 -05:00
```shell
2019-08-08 01:45:13 -04:00
for project_id in 321 456 987; do
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " --header "Content-Type: application/json" \
2020-05-27 20:08:37 -04:00
--data '{"title": "my key", "key": "ssh-rsa AAAA..."}' "https://gitlab.example.com/api/v4/projects/${project_id}/deploy_keys"
2019-08-08 01:45:13 -04:00
done
```