341 lines
11 KiB
Markdown
341 lines
11 KiB
Markdown
---
|
|
stage: Release
|
|
group: Release
|
|
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
|
|
---
|
|
|
|
# Deploy keys API **(FREE)**
|
|
|
|
## List all deploy keys **(FREE SELF)**
|
|
|
|
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.
|
|
|
|
```plaintext
|
|
GET /deploy_keys
|
|
```
|
|
|
|
Supported attributes:
|
|
|
|
| Attribute | Type | Required | Description |
|
|
|:------------|:---------|:---------|:----------------------|
|
|
| `public` | boolean | **{dotted-circle}** No | Only return deploy keys that are public. Defaults to `false`. |
|
|
|
|
Example request:
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/deploy_keys?public=true"
|
|
```
|
|
|
|
Example response:
|
|
|
|
```json
|
|
[
|
|
{
|
|
"id": 1,
|
|
"title": "Public key",
|
|
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",
|
|
"fingerprint": "7f:72:08:7d:0e:47:48:ec:37:79:b2:76:68:b5:87:65",
|
|
"created_at": "2013-10-02T10:12:29Z",
|
|
"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"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": 3,
|
|
"title": "Another Public key",
|
|
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",
|
|
"fingerprint": "64:d3:73:d4:83:70:ab:41:96:68:d5:3d:a5:b0:34:ea",
|
|
"created_at": "2013-10-02T11:12:29Z",
|
|
"projects_with_write_access": []
|
|
}
|
|
]
|
|
```
|
|
|
|
## List deploy keys for project
|
|
|
|
Get a list of a project's deploy keys.
|
|
|
|
```plaintext
|
|
GET /projects/:id/deploy_keys
|
|
```
|
|
|
|
| Attribute | Type | Required | Description |
|
|
| --------- | ---- | -------- | ----------- |
|
|
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user |
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/deploy_keys"
|
|
```
|
|
|
|
Example response:
|
|
|
|
```json
|
|
[
|
|
{
|
|
"id": 1,
|
|
"title": "Public key",
|
|
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",
|
|
"created_at": "2013-10-02T10:12:29Z",
|
|
"can_push": false
|
|
},
|
|
{
|
|
"id": 3,
|
|
"title": "Another Public key",
|
|
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",
|
|
"created_at": "2013-10-02T11:12:29Z",
|
|
"can_push": false
|
|
}
|
|
]
|
|
```
|
|
|
|
## 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,
|
|
"key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTEVaAtU5wiVducsOa01InRFf7QSTxoAm6Xy0PGv/k48M6xCALa9nY+BzlOv47jUT57 Key",
|
|
"fingerprint": "60:8e:10:f0:6a:82:c8:29:5f:bf:c0:38:72:00:6f:8f"
|
|
},
|
|
{
|
|
"id": 2,
|
|
"title": "Key B",
|
|
"created_at": "2022-05-30T13:34:56.219Z",
|
|
"expires_at": null,
|
|
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",
|
|
"fingerprint": "75:33:44:7e:55:84:dd:70:29:a3:8e:a3:c0:b9:8b:65"
|
|
}
|
|
]
|
|
```
|
|
|
|
```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",
|
|
"key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTEVaAtU5wiVducsOa01InRFf7QSTxoAm6Xy0PGv/k48M6xCALa9nY+BzlOv47jUT57 Key",
|
|
"fingerprint": "60:8e:10:f0:6a:82:c8:29:5f:bf:c0:38:72:00:6f:8f"
|
|
}
|
|
]
|
|
```
|
|
|
|
## Get a single deploy key
|
|
|
|
Get a single key.
|
|
|
|
```plaintext
|
|
GET /projects/:id/deploy_keys/:key_id
|
|
```
|
|
|
|
Parameters:
|
|
|
|
| Attribute | Type | Required | Description |
|
|
| --------- | ---- | -------- | ----------- |
|
|
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user |
|
|
| `key_id` | integer | yes | The ID of the deploy key |
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/deploy_keys/11"
|
|
```
|
|
|
|
Example response:
|
|
|
|
```json
|
|
{
|
|
"id": 1,
|
|
"title": "Public key",
|
|
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",
|
|
"created_at": "2013-10-02T10:12:29Z",
|
|
"can_push": false
|
|
}
|
|
```
|
|
|
|
## Add deploy key
|
|
|
|
Creates a new deploy key for a project.
|
|
|
|
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.
|
|
|
|
```plaintext
|
|
POST /projects/:id/deploy_keys
|
|
```
|
|
|
|
| Attribute | Type | Required | Description |
|
|
| --------- | ---- | -------- | ----------- |
|
|
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user |
|
|
| `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 |
|
|
|
|
```shell
|
|
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/"
|
|
```
|
|
|
|
Example response:
|
|
|
|
```json
|
|
{
|
|
"key" : "ssh-rsa AAAA...",
|
|
"id" : 12,
|
|
"title" : "My deploy key",
|
|
"can_push": true,
|
|
"created_at" : "2015-08-29T12:44:31.550Z"
|
|
}
|
|
```
|
|
|
|
## Update deploy key
|
|
|
|
Updates a deploy key for a project.
|
|
|
|
```plaintext
|
|
PUT /projects/:id/deploy_keys/:key_id
|
|
```
|
|
|
|
| Attribute | Type | Required | Description |
|
|
| --------- | ---- | -------- | ----------- |
|
|
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](index.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 |
|
|
|
|
```shell
|
|
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"
|
|
```
|
|
|
|
Example response:
|
|
|
|
```json
|
|
{
|
|
"id": 11,
|
|
"title": "New deploy key",
|
|
"key": "ssh-rsa AAAA...",
|
|
"created_at": "2015-08-29T12:44:31.550Z",
|
|
"can_push": true
|
|
}
|
|
```
|
|
|
|
## Delete deploy key
|
|
|
|
Removes a deploy key from the project. If the deploy key is used only for this project, it's deleted from the system.
|
|
|
|
```plaintext
|
|
DELETE /projects/:id/deploy_keys/:key_id
|
|
```
|
|
|
|
| Attribute | Type | Required | Description |
|
|
| --------- | ---- | -------- | ----------- |
|
|
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user |
|
|
| `key_id` | integer | yes | The ID of the deploy key |
|
|
|
|
```shell
|
|
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/deploy_keys/13"
|
|
```
|
|
|
|
## 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.
|
|
|
|
```plaintext
|
|
POST /projects/:id/deploy_keys/:key_id/enable
|
|
```
|
|
|
|
| Attribute | Type | Required | Description |
|
|
| --------- | ---- | -------- | ----------- |
|
|
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user |
|
|
| `key_id` | integer | yes | The ID of the deploy key |
|
|
|
|
```shell
|
|
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/deploy_keys/12/enable"
|
|
```
|
|
|
|
Example response:
|
|
|
|
```json
|
|
{
|
|
"key" : "ssh-rsa AAAA...",
|
|
"id" : 12,
|
|
"title" : "My deploy key",
|
|
"created_at" : "2015-08-29T12:44:31.550Z"
|
|
}
|
|
```
|
|
|
|
## Add deploy keys to multiple projects
|
|
|
|
If you want to add the same deploy key to multiple projects in the same
|
|
group, this can be achieved with the API.
|
|
|
|
First, find the ID of the projects you're interested in, by either listing all
|
|
projects:
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects"
|
|
```
|
|
|
|
Or finding the ID of a group:
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups"
|
|
```
|
|
|
|
Then listing all projects in that group (for example, group 1234):
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/1234"
|
|
```
|
|
|
|
With those IDs, add the same deploy key to all:
|
|
|
|
```shell
|
|
for project_id in 321 456 987; do
|
|
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"
|
|
done
|
|
```
|