curl --request GET \
--url https://cloud.cdata.com/api/v1/admin/workspaces/{workspace_id}/virtual-keys \
--header 'Authorization: Bearer <token>'import requests
url = "https://cloud.cdata.com/api/v1/admin/workspaces/{workspace_id}/virtual-keys"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://cloud.cdata.com/api/v1/admin/workspaces/{workspace_id}/virtual-keys', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://cloud.cdata.com/api/v1/admin/workspaces/{workspace_id}/virtual-keys",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://cloud.cdata.com/api/v1/admin/workspaces/{workspace_id}/virtual-keys"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://cloud.cdata.com/api/v1/admin/workspaces/{workspace_id}/virtual-keys")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://cloud.cdata.com/api/v1/admin/workspaces/{workspace_id}/virtual-keys")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"items": [
{
"virtual_key_id": "e5f6a7b8-c9d0-1234-efab-345678901234",
"last_four": "x7Qa",
"name": "ci-pipeline-key",
"key_type": "service_account",
"user_id": null,
"service_account_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"workspace_id": "f6a7b8c9-d0e1-2345-fabc-456789012345",
"project_id": "a7b8c9d0-e1f2-3456-abcd-567890123456",
"status": "active",
"created_at": "2026-10-30T09:00:00Z",
"created_by": "00000000-0000-0000-0000-000000000001",
"revoked_at": null,
"revoked_by": null
}
],
"limit": 20,
"next_cursor": null
}List Workspace Virtual Keys
List the virtual keys across all projects in a workspace, including disabled and revoked keys. Results are sorted newest first and paginated using a cursor. The key secret is never returned; use last_four to identify a key. An invalid limit, a cursor that was not issued by this list, or an unknown query parameter returns 400.
curl --request GET \
--url https://cloud.cdata.com/api/v1/admin/workspaces/{workspace_id}/virtual-keys \
--header 'Authorization: Bearer <token>'import requests
url = "https://cloud.cdata.com/api/v1/admin/workspaces/{workspace_id}/virtual-keys"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://cloud.cdata.com/api/v1/admin/workspaces/{workspace_id}/virtual-keys', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://cloud.cdata.com/api/v1/admin/workspaces/{workspace_id}/virtual-keys",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://cloud.cdata.com/api/v1/admin/workspaces/{workspace_id}/virtual-keys"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://cloud.cdata.com/api/v1/admin/workspaces/{workspace_id}/virtual-keys")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://cloud.cdata.com/api/v1/admin/workspaces/{workspace_id}/virtual-keys")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"items": [
{
"virtual_key_id": "e5f6a7b8-c9d0-1234-efab-345678901234",
"last_four": "x7Qa",
"name": "ci-pipeline-key",
"key_type": "service_account",
"user_id": null,
"service_account_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"workspace_id": "f6a7b8c9-d0e1-2345-fabc-456789012345",
"project_id": "a7b8c9d0-e1f2-3456-abcd-567890123456",
"status": "active",
"created_at": "2026-10-30T09:00:00Z",
"created_by": "00000000-0000-0000-0000-000000000001",
"revoked_at": null,
"revoked_by": null
}
],
"limit": 20,
"next_cursor": null
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Path Parameters
Workspace identifier (UUID).
Query Parameters
Filter to virtual keys issued for a specific project.
Filter to virtual keys issued to a specific user.
Filter to virtual keys issued to a specific service account.
Filter by the type of identity the key is issued to.
user, service_account Filter by key status.
active, disabled, revoked Filter to virtual keys created by a specific user (UUID).
Return only keys created after this time (ISO 8601 UTC).
Return only keys created before this time (ISO 8601 UTC).
Maximum number of results to return per page.
x <= 100Opaque pagination cursor from next_cursor in the previous response. Omit to start from the beginning.
Was this page helpful?