This documentation has moved
This content now lives on the Virtana documentation site and is no longer updated. This site will be taken offline on January 31, 2027.
Go to the current documentation and update your bookmarks.
Credentials management service
The credentials management service provides resources for managing the credentials that are required to integrate with external services.
Resource list
- Create a credential (POST /v1/credentials/)
- Get all credentials (GET /v1/credentials)
- Update a credential (PUT /v1/credentials/{id})
- Delete a credential (DELETE /v1/credentials/{id})
POST /v1/credentials
Create a credential.
Request template
An abstract preview of a JSON request to create one credential.
{
"info": {
"name": "<name>",
"type": "<type>",
"description": "<description>",
"tags": [ "<tag>" ]
},
"secrets": {
"<key>": "<value>",
"<key>": "<value>"
}
}
Request fields
Create requests must include an info field and may include a secrets field.
The contents of a secrets field vary by credential type.
The allowedApiClients field is reserved for future use.
-
info(object, required) - A container object for credential information.
-
name(string, required) - The credential name.
-
type(string, required) -
The credential type.
m365— Microsoft 365pagerDuty— PagerDutyservicenowOAuth— ServiceNow IT Operations Management OAuthslack— SlackusernamePassword— Username and passwordzoom— Zoom
-
description(string, optional) - Text about the credential.
-
tags(array, optional) - A list of arbitrary terms to associate with the credential.
-
usedBy(object, optional) - A container for
collectionsanddestinationsobjects (either or both). -
collections(object, optional) - A container for an
idsarray (a list of connector identifiers). -
destinations(object, optional) - A container for an
idsarray (a list of destination identifiers). -
ids(array, optional) - A list of connector or destination identifiers that use the credential.
-
secrets(object, optional) - A container object for secret credential information.
-
clientID(string, required) - (
type=m365only) The client ID from the Essentials area on the home page of your Microsoft 365 app registration. -
clientSecret(string, required) - (
type=m365only) The client secret from the Certificates & secrets page of your Microsoft 365 app registration. -
routingKey(string, required) - (
type=pagerDutyonly) A PagerDuty Integration Key. -
clientId(string, required) - (
type=servicenowOAuthonly) The ServiceNow ID for your integration with Virtana Service Observability. -
clientSecret(string, required) - (
type=servicenowOAuthonly) The ServiceNow secret for your integration with Virtana Service Observability. -
token(string, required) - (
type=slackonly) A Slack bot token for the Virtana Slack app. -
username(string, required) - (
type=usernamePasswordonly) A user account name. -
password(string, required) - (
type=usernamePasswordonly) A user account password. -
accountId(string, required) - (
type=zoomonly) The account ID of your Zoom OAuth app. -
clientId(string, required) - (
type=zoomonly) The client ID of your Zoom OAuth app. -
clientSecret(string, required) - (
type=zoomonly) The client secret of your Zoom OAuth app.
Status codes
- 500 (missing or invalid authentication key)
Examples
The secrets field is never included in responses.
Microsoft 365
curl https://YOUR-API-ENDPOINT/v1/credentials \
-H "content-type: application/json" \
-H "zenoss-api-key: YOUR-API-KEY" \
-X POST -s -d \
'{
"info": {
"name": "marketing-teams",
"type": "m365",
"description": "Marketing - Teams",
"tags": [
"marketing"
]
},
"secrets": {
"clientId": "YOUR-CLIENT-ID",
"clientSecret": "YOUR-CLIENT-SECRET"
}
}'
{
"info": {
"id": "5235aff4-0923-5938-1f9e-eeb3753fe5a3",
"info": {
"name": "marketing-teams",
"type": "m365",
"description": "Marketing - Teams",
"tags": [
"marketing"
],
"usedBy": {},
"allowedApiClients": []
}
}
}
PagerDuty
curl https://YOUR-API-ENDPOINT/v1/credentials \
-H "content-type: application/json" \
-H "zenoss-api-key: YOUR-API-KEY" \
-X POST -s -d \
'{
"info": {
"name": "marketing-pagerduty",
"type": "pagerDuty",
"description": "Marketing - PagerDuty",
"tags": [
"marketing"
]
},
"secrets": {
"routingKey": "YOUR-ROUTING-KEY"
}
}'
{
"info": {
"id": "d29453c4-ef8e-324e-4cb6-0d6fd4023feb",
"info": {
"name": "marketing-pagerduty",
"type": "pagerDuty",
"description": "Marketing - PagerDuty",
"tags": [
"marketing"
],
"usedBy": {},
"allowedApiClients": []
}
}
}
Password
curl https://YOUR-API-ENDPOINT/v1/credentials \
-H "content-type: application/json" \
-H "zenoss-api-key: YOUR-API-KEY" \
-X POST -s -d \
'{
"info": {
"name": "marketing-password",
"type": "usernamePassword",
"description": "Marketing - Password",
"tags": [
"marketing"
]
},
"secrets": {
"username": "craftyuser",
"password": "CraftyIsAsCraftyDoes123"
}
}'
{
"info": {
"id": "c88c8e22-23db-ab83-3404-dc9233192009",
"info": {
"name": "marketing-password",
"type": "usernamePassword",
"description": "Marketing - Password",
"tags": [
"marketing"
],
"usedBy": {},
"allowedApiClients": []
}
}
}
Slack
curl https://YOUR-API-ENDPOINT/v1/credentials \
-H "content-type: application/json" \
-H "zenoss-api-key: YOUR-API-KEY" \
-X POST -s -d \
'{
"info": {
"name": "marketing-slack",
"type": "slack",
"description": "Marketing - Slack",
"tags": [
"marketing"
]
},
"secrets": {
"token": "YOUR-JWT-TOKEN"
}
}'
{
"info": {
"id": "0eae9bd7-2106-c67b-a053-5e574f4f8743",
"info": {
"name": "marketing-slack",
"type": "slack",
"description": "Marketing - Slack",
"tags": [
"marketing"
],
"usedBy": {},
"allowedApiClients": []
}
}
}
ServiceNow
curl https://YOUR-API-ENDPOINT/v1/credentials \
-H "content-type: application/json" \
-H "zenoss-api-key: YOUR-API-KEY" \
-X POST -s -d \
'{
"info": {
"name": "marketing-servicenow",
"type": "servicenowOAuth",
"description": "Marketing - ServiceNow",
"tags": [
"marketing"
]
},
"secrets": {
"clientId": "YOUR-CLIENT-ID",
"clientSecret": "YOUR-CLIENT-SECRET"
}
}'
{
"info": {
"id": "c3c36b07-f301-bfa9-9e2e-aa1ba43343e8",
"info": {
"name": "marketing-servicenow",
"type": "servicenowOAuth",
"description": "Marketing - ServiceNow",
"tags": [
"marketing"
],
"usedBy": {},
"allowedApiClients": []
}
}
}
Zoom
curl https://YOUR-API-ENDPOINT/v1/credentials \
-H "content-type: application/json" \
-H "zenoss-api-key: YOUR-API-KEY" \
-X POST -s -d \
{
"info": {
"name": "marketing-zoom",
"type": "zoom",
"description": "Marketing - Zoom",
"tags": [
"marketing"
]
},
"secrets": {
"accountId": "YOUR-ACCOUNT-ID",
"clientId": "YOUR-CLIENT-ID",
"clientSecret": "YOUR-CLIENT-SECRET"
}
}
{
"info": {
"id": "5e63e8c0-992f-ed53-a2da-ff1f8307f272",
"info": {
"name": "marketing-zoom",
"type": "zoom",
"description": "Marketing - Zoom",
"tags": [
"marketing"
],
"usedBy": {},
"allowedApiClients": []
}
}
}
GET /v1/credentials
Get all credentials.
Status codes
- 500 (missing or invalid authentication key)
Example
curl https://YOUR-API-ENDPOINT/v1/credentials \
-H "content-type: application/json" \
-H "zenoss-api-key: YOUR-API-KEY" \
-X GET -s
{
"credentials": [
{
"id": "db98013d-41d8-7b3a-a9f1-2c4e37873594",
"info": {
"name": "mkt-teams",
"type": "m365",
"description": "Marketing - Teams",
"tags": [
"marketing"
],
"usedBy": {},
"allowedApiClients": []
}
},
{
"id": "fb0e160d-fd51-9349-14f0-83ae56723a9a",
"info": {
"name": "mkt-zoom",
"type": "zoom",
"description": "Marketing - Zoom",
"tags": [
"marketing"
],
"usedBy": {},
"allowedApiClients": []
}
}
],
"nextPageToken": "",
"totalCount": "2"
}
PUT /v1/credentials/{id}
Update a credential.
Request fields
Update requests use the same fields as create requests.
Note
If you include both an info field and a secrets field in an update
request, their contents completely replace the credential's record on
the server. However, if you do not include a secrets field in an
update request, the existing secrets field (if any) is unchanged.
Status codes
- 200 (success)
- 500 (missing or invalid authentication key)
- 501 (method not allowed)
Example
The secrets field is never included in responses.
curl https://YOUR-API-ENDPOINT/v1/credentials/YOUR-CREDENTIAL-ID \
-H "content-type: application/json" \
-H "zenoss-api-key: YOUR-API-KEY" \
-X PUT -s -d \
{
"info": {
"name": "marketing-zoom-updated",
"type": "zoom",
"description": "Marketing - Zoom (updated)",
"tags": [
"marketing"
]
},
"secrets": {
"apiKey": "YOUR-API-KEY",
"apiSecret": "YOUR-API-SECRET"
}
}
{
"info": {
"name": "marketing-zoom-updated",
"type": "zoom",
"description": "Marketing - Zoom (updated)",
"tags": [
"marketing"
],
"usedBy": {},
"allowedApiClients": []
}
}
DELETE /v1/credentials/{id}
Delete a credential.
Status codes
- 500 (missing or invalid authentication key)
- 501 (method not allowed)
Example
curl https://YOUR-API-ENDPOINT/v1/credentials/YOUR-CREDENTIAL-ID \
-H "content-type: application/json" \
-H "zenoss-api-key: YOUR-API-KEY" \
-X DELETE -s
{
"id": "db98013d-41d8-7b3a-a9f1-2c4e37873594"
}