2020-07-28 23:09:34 +05:30
---
2023-06-20 00:43:36 +05:30
stage: Deploy
group: Environments
2022-11-25 23:54:43 +05:30
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
2020-07-28 23:09:34 +05:30
---
2021-11-11 11:23:49 +05:30
# Deploy keys API **(FREE)**
2014-09-02 18:07:02 +05:30
2022-08-13 15:12:31 +05:30
The deploy keys API can return in responses fingerprints of the public key in the following fields:
- `fingerprint` (MD5 hash). Not available on FIPS-enabled systems.
- `fingerprint_sha256` (SHA256 hash). [Introduced ](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/91302 ) in GitLab 15.2.
2021-11-11 11:23:49 +05:30
## List all deploy keys **(FREE SELF)**
2016-08-24 12:49:21 +05:30
2021-11-11 11:23:49 +05:30
Get a list of all deploy keys across all projects of the GitLab instance. This
2022-04-04 11:22:00 +05:30
endpoint requires administrator access and is not available on GitLab.com.
2016-08-24 12:49:21 +05:30
2020-04-08 14:13:33 +05:30
```plaintext
2016-08-24 12:49:21 +05:30
GET /deploy_keys
```
2021-12-11 22:18:48 +05:30
Supported attributes:
| Attribute | Type | Required | Description |
|:------------|:---------|:---------|:----------------------|
| `public` | boolean | ** {dotted-circle}** No | Only return deploy keys that are public. Defaults to `false` . |
Example request:
2020-03-13 15:44:24 +05:30
```shell
2021-12-11 22:18:48 +05:30
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/deploy_keys?public=true"
2016-08-24 12:49:21 +05:30
```
Example response:
```json
[
{
"id": 1,
"title": "Public key",
2022-08-13 15:12:31 +05:30
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDNJAkI3Wdf0r13c8a5pEExB2YowPWCSVzfZV22pNBc1CuEbyYLHpUyaD0GwpGvFdx2aP7lMEk35k6Rz3ccBF6jRaVJyhsn5VNnW92PMpBJ/P1UebhXwsFHdQf5rTt082cSxWuk61kGWRQtk4ozt/J2DF/dIUVaLvc+z4HomT41fQ==",
"fingerprint": "4a:9d:64:15:ed:3a:e6:07:6e:89:36:b3:3b:03:05:d9",
"fingerprint_sha256": "SHA256:Jrs3LD1Ji30xNLtTVf9NDCj7kkBgPBb2pjvTZ3HfIgU",
2021-12-11 22:18:48 +05:30
"created_at": "2013-10-02T10:12:29Z",
2023-06-20 00:43:36 +05:30
"expires_at": null,
2021-12-11 22:18:48 +05:30
"projects_with_write_access": [
{
"id": 73,
"description": null,
"name": "project2",
"name_with_namespace": "Sidney Jones / project2",
"path": "project2",
"path_with_namespace": "sidney_jones/project2",
"created_at": "2021-10-25T18:33:17.550Z"
},
{
"id": 74,
"description": null,
"name": "project3",
"name_with_namespace": "Sidney Jones / project3",
"path": "project3",
"path_with_namespace": "sidney_jones/project3",
"created_at": "2021-10-25T18:33:17.666Z"
}
]
2016-08-24 12:49:21 +05:30
},
{
"id": 3,
"title": "Another Public key",
2022-08-13 15:12:31 +05:30
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDIJFwIL6YNcCgVBLTHgM6hzmoL5vf0ThDKQMWT3HrwCjUCGPwR63vBwn6+/Gx+kx+VTo9FuojzR0O4XfwD3LrYA+oT3ETbn9U4e/VS4AH/G4SDMzgSLwu0YuPe517FfGWhWGQhjiXphkaQ+6bXPmcASWb0RCO5+pYlGIfxv4eFGQ=="
"fingerprint": "0b:cf:58:40:b9:23:96:c7:ba:44:df:0e:9e:87:5e:75",
"fingerprint_sha256": "SHA256:lGI/Ys/Wx7PfMhUO1iuBH92JQKYN+3mhJZvWO4Q5ims",
2021-12-11 22:18:48 +05:30
"created_at": "2013-10-02T11:12:29Z",
2023-06-20 00:43:36 +05:30
"expires_at": null,
2021-12-11 22:18:48 +05:30
"projects_with_write_access": []
2016-08-24 12:49:21 +05:30
}
]
```
2022-07-23 23:45:48 +05:30
## List deploy keys for project
2014-09-02 18:07:02 +05:30
Get a list of a project's deploy keys.
2020-04-08 14:13:33 +05:30
```plaintext
2016-08-24 12:49:21 +05:30
GET /projects/:id/deploy_keys
2014-09-02 18:07:02 +05:30
```
2016-04-02 18:10:28 +05:30
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
2023-04-23 21:23:45 +05:30
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](rest/index.md#namespaced-path-encoding ) owned by the authenticated user |
2016-04-02 18:10:28 +05:30
2020-03-13 15:44:24 +05:30
```shell
2019-02-15 15:39:39 +05:30
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/5/deploy_keys"
2016-04-02 18:10:28 +05:30
```
2014-09-02 18:07:02 +05:30
2016-04-02 18:10:28 +05:30
Example response:
2014-09-02 18:07:02 +05:30
```json
[
{
"id": 1,
"title": "Public key",
2022-08-13 15:12:31 +05:30
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDNJAkI3Wdf0r13c8a5pEExB2YowPWCSVzfZV22pNBc1CuEbyYLHpUyaD0GwpGvFdx2aP7lMEk35k6Rz3ccBF6jRaVJyhsn5VNnW92PMpBJ/P1UebhXwsFHdQf5rTt082cSxWuk61kGWRQtk4ozt/J2DF/dIUVaLvc+z4HomT41fQ==",
"fingerprint": "4a:9d:64:15:ed:3a:e6:07:6e:89:36:b3:3b:03:05:d9",
"fingerprint_sha256": "SHA256:Jrs3LD1Ji30xNLtTVf9NDCj7kkBgPBb2pjvTZ3HfIgU",
2018-03-17 18:26:18 +05:30
"created_at": "2013-10-02T10:12:29Z",
2023-06-20 00:43:36 +05:30
"expires_at": null,
2018-03-17 18:26:18 +05:30
"can_push": false
2014-09-02 18:07:02 +05:30
},
{
"id": 3,
"title": "Another Public key",
2022-08-13 15:12:31 +05:30
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDIJFwIL6YNcCgVBLTHgM6hzmoL5vf0ThDKQMWT3HrwCjUCGPwR63vBwn6+/Gx+kx+VTo9FuojzR0O4XfwD3LrYA+oT3ETbn9U4e/VS4AH/G4SDMzgSLwu0YuPe517FfGWhWGQhjiXphkaQ+6bXPmcASWb0RCO5+pYlGIfxv4eFGQ=="
"fingerprint": "0b:cf:58:40:b9:23:96:c7:ba:44:df:0e:9e:87:5e:75",
"fingerprint_sha256": "SHA256:lGI/Ys/Wx7PfMhUO1iuBH92JQKYN+3mhJZvWO4Q5ims",
2018-03-17 18:26:18 +05:30
"created_at": "2013-10-02T11:12:29Z",
2023-06-20 00:43:36 +05:30
"expires_at": null,
2018-03-17 18:26:18 +05:30
"can_push": false
2014-09-02 18:07:02 +05:30
}
]
```
2022-07-23 23:45:48 +05:30
## List project deploy keys for user
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/88917) in GitLab 15.1.
Get a list of a specified user (requestee) and the authenticated user's (requester) common [project deploy keys ](../user/project/deploy_keys/index.md#scope ). It lists only the **enabled project keys from the common projects of requester and requestee** .
```plaintext
GET /users/:id_or_username/project_deploy_keys
```
Parameters:
| Attribute | Type | Required | Description |
|------------------- |--------|----------|------------------------------------------------------------------- |
| `id_or_username` | string | yes | The ID or username of the user to get the project deploy keys for. |
```json
[
{
"id": 1,
"title": "Key A",
"created_at": "2022-05-30T12:28:27.855Z",
"expires_at": null,
2022-08-13 15:12:31 +05:30
"key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILkYXU2fVeO4/0rDCSsswP5iIX2+B6tv15YT3KObgyDl Key",
"fingerprint": "40:8e:fa:df:70:f7:a7:06:1e:0d:6f:ae:f2:27:92:01",
"fingerprint_sha256": "SHA256:Ojq2LZW43BFK/AMP81jBkDGn9YpPWYRNcViKBB44LPU"
2022-07-23 23:45:48 +05:30
},
{
"id": 2,
"title": "Key B",
"created_at": "2022-05-30T13:34:56.219Z",
"expires_at": null,
2022-08-13 15:12:31 +05:30
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDNJAkI3Wdf0r13c8a5pEExB2YowPWCSVzfZV22pNBc1CuEbyYLHpUyaD0GwpGvFdx2aP7lMEk35k6Rz3ccBF6jRaVJyhsn5VNnW92PMpBJ/P1UebhXwsFHdQf5rTt082cSxWuk61kGWRQtk4ozt/J2DF/dIUVaLvc+z4HomT41fQ==",
"fingerprint": "4a:9d:64:15:ed:3a:e6:07:6e:89:36:b3:3b:03:05:d9",
"fingerprint_sha256": "SHA256:Jrs3LD1Ji30xNLtTVf9NDCj7kkBgPBb2pjvTZ3HfIgU",
2022-07-23 23:45:48 +05:30
}
]
```
```shell
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/users/20/project_deploy_keys"
```
Example response:
```json
[
{
"id": 1,
"title": "Key A",
"created_at": "2022-05-30T12:28:27.855Z",
"expires_at": "2022-10-30T12:28:27.855Z",
2022-08-13 15:12:31 +05:30
"key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILkYXU2fVeO4/0rDCSsswP5iIX2+B6tv15YT3KObgyDl Key",
"fingerprint": "40:8e:fa:df:70:f7:a7:06:1e:0d:6f:ae:f2:27:92:01",
"fingerprint_sha256": "SHA256:Ojq2LZW43BFK/AMP81jBkDGn9YpPWYRNcViKBB44LPU"
2022-07-23 23:45:48 +05:30
}
]
```
2021-11-11 11:23:49 +05:30
## Get a single deploy key
2014-09-02 18:07:02 +05:30
Get a single key.
2020-04-08 14:13:33 +05:30
```plaintext
2016-08-24 12:49:21 +05:30
GET /projects/:id/deploy_keys/:key_id
2014-09-02 18:07:02 +05:30
```
Parameters:
2016-04-02 18:10:28 +05:30
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
2023-04-23 21:23:45 +05:30
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](rest/index.md#namespaced-path-encoding ) owned by the authenticated user |
2016-04-02 18:10:28 +05:30
| `key_id` | integer | yes | The ID of the deploy key |
2020-03-13 15:44:24 +05:30
```shell
2019-02-15 15:39:39 +05:30
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/5/deploy_keys/11"
2016-04-02 18:10:28 +05:30
```
Example response:
2014-09-02 18:07:02 +05:30
```json
{
"id": 1,
"title": "Public key",
2022-08-13 15:12:31 +05:30
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDNJAkI3Wdf0r13c8a5pEExB2YowPWCSVzfZV22pNBc1CuEbyYLHpUyaD0GwpGvFdx2aP7lMEk35k6Rz3ccBF6jRaVJyhsn5VNnW92PMpBJ/P1UebhXwsFHdQf5rTt082cSxWuk61kGWRQtk4ozt/J2DF/dIUVaLvc+z4HomT41fQ==",
"fingerprint": "4a:9d:64:15:ed:3a:e6:07:6e:89:36:b3:3b:03:05:d9",
"fingerprint_sha256": "SHA256:Jrs3LD1Ji30xNLtTVf9NDCj7kkBgPBb2pjvTZ3HfIgU",
2018-03-17 18:26:18 +05:30
"created_at": "2013-10-02T10:12:29Z",
2023-06-20 00:43:36 +05:30
"expires_at": null,
2018-03-17 18:26:18 +05:30
"can_push": false
2014-09-02 18:07:02 +05:30
}
```
## Add deploy key
Creates a new deploy key for a project.
2016-04-02 18:10:28 +05:30
2021-03-08 18:12:59 +05:30
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.
2014-09-02 18:07:02 +05:30
2020-04-08 14:13:33 +05:30
```plaintext
2016-08-24 12:49:21 +05:30
POST /projects/:id/deploy_keys
2014-09-02 18:07:02 +05:30
```
2023-06-20 00:43:36 +05:30
| Attribute | Type | Required | Description |
| ----------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](rest/index.md#namespaced-path-encoding ) owned by the authenticated user |
| `key` | string | yes | New deploy key |
2023-07-09 08:55:56 +05:30
| `title` | string | yes | New deploy key's title |
2023-06-20 00:43:36 +05:30
| `can_push` | boolean | no | Can deploy key push to the project's repository |
2023-07-09 08:55:56 +05:30
| `expires_at` | datetime | no | Expiration date for the deploy key. Does not expire if no value is provided. Expected in ISO 8601 format (`2019-03-15T08:00:00Z`) |
2016-04-02 18:10:28 +05:30
2020-03-13 15:44:24 +05:30
```shell
2021-09-04 01:27:46 +05:30
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-04-02 18:10:28 +05:30
```
2014-09-02 18:07:02 +05:30
2016-04-02 18:10:28 +05:30
Example response:
```json
{
"key" : "ssh-rsa AAAA...",
"id" : 12,
"title" : "My deploy key",
2017-08-17 22:00:37 +05:30
"can_push": true,
2023-06-20 00:43:36 +05:30
"created_at" : "2015-08-29T12:44:31.550Z",
"expires_at": null
2016-04-02 18:10:28 +05:30
}
```
2014-09-02 18:07:02 +05:30
2018-03-17 18:26:18 +05:30
## Update deploy key
Updates a deploy key for a project.
2020-04-08 14:13:33 +05:30
```plaintext
2018-03-17 18:26:18 +05:30
PUT /projects/:id/deploy_keys/:key_id
```
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
2023-04-23 21:23:45 +05:30
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](rest/index.md#namespaced-path-encoding ) owned by the authenticated user |
2018-03-17 18:26:18 +05:30
| `can_push` | boolean | no | Can deploy key push to the project's repository |
2023-07-09 08:55:56 +05:30
| `title` | string | no | New deploy key's title |
2018-03-17 18:26:18 +05:30
2020-03-13 15:44:24 +05:30
```shell
2021-09-04 01:27:46 +05:30
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-03-17 18:26:18 +05:30
```
Example response:
```json
{
"id": 11,
"title": "New deploy key",
"key": "ssh-rsa AAAA...",
"created_at": "2015-08-29T12:44:31.550Z",
2023-06-20 00:43:36 +05:30
"expires_at": null,
2018-03-17 18:26:18 +05:30
"can_push": true
}
```
2014-09-02 18:07:02 +05:30
## Delete deploy key
2021-03-08 18:12:59 +05:30
Removes a deploy key from the project. If the deploy key is used only for this project, it's deleted from the system.
2014-09-02 18:07:02 +05:30
2020-04-08 14:13:33 +05:30
```plaintext
2016-08-24 12:49:21 +05:30
DELETE /projects/:id/deploy_keys/:key_id
2014-09-02 18:07:02 +05:30
```
2016-04-02 18:10:28 +05:30
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
2023-04-23 21:23:45 +05:30
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](rest/index.md#namespaced-path-encoding ) owned by the authenticated user |
2016-04-02 18:10:28 +05:30
| `key_id` | integer | yes | The ID of the deploy key |
2020-03-13 15:44:24 +05:30
```shell
2019-02-15 15:39:39 +05:30
curl --request DELETE --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/5/deploy_keys/13"
2016-04-02 18:10:28 +05:30
```
2016-09-13 17:45:13 +05:30
## 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.
2022-07-23 23:45:48 +05:30
```plaintext
POST /projects/:id/deploy_keys/:key_id/enable
2016-09-13 17:45:13 +05:30
```
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
2023-04-23 21:23:45 +05:30
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](rest/index.md#namespaced-path-encoding ) owned by the authenticated user |
2016-09-13 17:45:13 +05:30
| `key_id` | integer | yes | The ID of the deploy key |
2022-07-23 23:45:48 +05:30
```shell
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/5/deploy_keys/12/enable"
```
2016-09-13 17:45:13 +05:30
Example response:
```json
{
"key" : "ssh-rsa AAAA...",
"id" : 12,
"title" : "My deploy key",
2023-06-20 00:43:36 +05:30
"created_at" : "2015-08-29T12:44:31.550Z",
"expires_at": null
2016-09-13 17:45:13 +05:30
}
```
2019-12-04 20:38:33 +05:30
2021-11-11 11:23:49 +05:30
## Add deploy keys to multiple projects
2019-10-12 21:52:04 +05:30
2021-11-11 11:23:49 +05:30
If you want to add the same deploy key to multiple projects in the same
group, this can be achieved with the API.
2019-10-12 21:52:04 +05:30
First, find the ID of the projects you're interested in, by either listing all
projects:
2020-03-13 15:44:24 +05:30
```shell
2020-06-23 00:09:42 +05:30
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects"
2019-10-12 21:52:04 +05:30
```
2019-12-04 20:38:33 +05:30
Or finding the ID of a group:
2019-10-12 21:52:04 +05:30
2020-03-13 15:44:24 +05:30
```shell
2020-06-23 00:09:42 +05:30
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/groups"
2019-12-04 20:38:33 +05:30
```
Then listing all projects in that group (for example, group 1234):
2019-10-12 21:52:04 +05:30
2020-03-13 15:44:24 +05:30
```shell
2020-06-23 00:09:42 +05:30
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/groups/1234"
2019-10-12 21:52:04 +05:30
```
With those IDs, add the same deploy key to all:
2020-03-13 15:44:24 +05:30
```shell
2019-10-12 21:52:04 +05:30
for project_id in 321 456 987; do
2021-09-04 01:27:46 +05:30
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-10-12 21:52:04 +05:30
done
```