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-09-09 11:09:24 -04:00
# Deploy keys API **(FREE)**
2013-06-06 06:19:23 -04:00
2021-09-09 11:09:24 -04:00
## List all deploy keys **(FREE SELF)**
2016-06-01 22:25:22 -04:00
2021-08-26 20:08:45 -04:00
Get a list of all deploy keys across all projects of the GitLab instance. This
endpoint requires an administrator role 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 |
| --------- | ---- | -------- | ----------- |
2021-06-28 11:08:03 -04:00
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](index.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
}
]
```
2021-08-26 20:08:45 -04:00
## Get a 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 |
| --------- | ---- | -------- | ----------- |
2021-06-28 11:08:03 -04:00
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](index.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 |
| --------- | ---- | -------- | ----------- |
2021-06-28 11:08:03 -04:00
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](index.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
2021-06-02 11:09:59 -04: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 |
| --------- | ---- | -------- | ----------- |
2021-06-28 11:08:03 -04:00
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](index.md#namespaced-path-encoding ) owned by the authenticated user |
2018-01-05 10:23:44 -05:00
| `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
2021-06-02 11:09:59 -04: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 |
| --------- | ---- | -------- | ----------- |
2021-06-28 11:08:03 -04:00
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](index.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 |
| --------- | ---- | -------- | ----------- |
2021-06-28 11:08:03 -04:00
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](index.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
2021-08-26 20:08:45 -04:00
## Add deploy keys to multiple projects
2019-08-08 01:45:13 -04:00
2021-08-26 20:08:45 -04:00
If you want to add the same deploy key to multiple projects in the same
group, this can be achieved with the API.
2019-08-08 01:45:13 -04:00
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
2021-06-02 11:09:59 -04:00
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " \
--header "Content-Type: application/json" \
--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
```