Skip to main content

Credentials API

The Credentials API allows you to manage account-level credentials in Quave ONE. Credentials store sensitive material your apps and environments need at runtime — Docker registry logins, HTTP basic-auth users, TLS certificates and ACME wildcard configurations.

Make sure to read the Get Started document to understand how the API works.

Note: Mutating endpoints (create, update, delete, set-default, sync) require the Manage Credentials or Admin role on the account. Read endpoints (list, get, references) are available to any account member but strip sensitive fields for non-managers.

Create Credential

To create a new credential, send a POST request to /api/public/v1/credential.

FieldTypeDescriptionRequired
accountIdStringThe account ID to create the credential in.Yes
typeStringOne of: CONTAINER_REGISTRY, BASIC_AUTH, TLS_CERTIFICATE, ACME_WILDCARD.Yes
nameStringA short name for the credential.Yes
descriptionStringOptional description.No
isDefaultBooleanFor Container Registry only — promote as account-wide default.No
providerStringFor ACME Wildcard only — one of: AWS_ROUTE53, AZURE, CLOUDFLARE, GCP, WEBHOOK.Conditional
dataObjectType-specific payload (see examples below).Yes

Container Registry example

curl -X POST \
-H 'Authorization: YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"accountId": "ACC_ID",
"type": "CONTAINER_REGISTRY",
"name": "Docker Hub",
"isDefault": true,
"data": {
"server": "https://index.docker.io/v1/",
"email": "me@example.com",
"username": "myuser",
"password": "mypassword"
}
}' \
https://api.quave.cloud/api/public/v1/credential

Basic Auth example

curl -X POST \
-H 'Authorization: YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"accountId": "ACC_ID",
"type": "BASIC_AUTH",
"name": "Staging gate",
"data": {
"username": "stageuser",
"password": "stagepass"
}
}' \
https://api.quave.cloud/api/public/v1/credential

TLS Certificate example

curl -X POST \
-H 'Authorization: YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"accountId": "ACC_ID",
"type": "TLS_CERTIFICATE",
"name": "example.com cert",
"data": {
"certificate": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
"privateKey": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----",
"ca": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----"
}
}' \
https://api.quave.cloud/api/public/v1/credential

ACME Wildcard example

curl -X POST \
-H 'Authorization: YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"accountId": "ACC_ID",
"type": "ACME_WILDCARD",
"name": "*.example.com",
"provider": "CLOUDFLARE",
"data": {
"commonName": "*.example.com",
"altNames": ["example.com"],
"providerConfig": "{\"apiToken\":\"cf-token-here\"}"
}
}' \
https://api.quave.cloud/api/public/v1/credential

Response (all types):

{
"credentialId": "CREDENTIAL_ID",
"message": "Credential created successfully"
}

List Credentials

List all credentials for an account. Optionally filter by type.

curl -X GET \
-H 'Authorization: YOUR_TOKEN' \
'https://api.quave.cloud/api/public/v1/credentials?accountId=ACC_ID'

With type filter:

curl -X GET \
-H 'Authorization: YOUR_TOKEN' \
'https://api.quave.cloud/api/public/v1/credentials?accountId=ACC_ID&type=CONTAINER_REGISTRY'

Response:

{
"credentials": [
{
"credentialId": "CREDENTIAL_ID",
"accountId": "ACC_ID",
"type": "CONTAINER_REGISTRY",
"name": "Docker Hub",
"description": "",
"isDefault": true,
"revision": 1,
"createdAt": "2025-01-01T00:00:00.000Z",
"updatedAt": "2025-01-01T00:00:00.000Z",
"regionSyncStatuses": { "us-east-1": "SYNCED" },
"data": { "server": "https://index.docker.io/v1/" }
}
]
}
note

Sensitive values (passwords, private keys, provider configs) are never returned in list or get responses. Only non-sensitive metadata like server, commonName, and altNames appear in the data field.

Get Credential

curl -X GET \
-H 'Authorization: YOUR_TOKEN' \
'https://api.quave.cloud/api/public/v1/credential?credentialId=CREDENTIAL_ID'

Returns the same shape as a single item from the list response.

Update Credential

Send a PATCH request with the fields to update. The type cannot be changed after creation. Omit sensitive data fields to keep their stored values.

curl -X PATCH \
-H 'Authorization: YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"credentialId": "CREDENTIAL_ID",
"name": "Docker Hub (updated)",
"data": {
"server": "https://index.docker.io/v1/",
"email": "new@example.com",
"username": "newuser"
}
}' \
https://api.quave.cloud/api/public/v1/credential

Response:

{
"credentialId": "CREDENTIAL_ID",
"message": "Credential updated successfully"
}

Set Default Credential

Promotes a Container Registry credential to the account-wide default. Apps without an explicit registry selection will use this one.

curl -X POST \
-H 'Authorization: YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{ "credentialId": "CREDENTIAL_ID" }' \
https://api.quave.cloud/api/public/v1/credential/set-default

Delete Credential

Deletes a credential. Returns 409 Conflict if the credential is still referenced by apps, hosts, or environments — use List References to check first.

curl -X DELETE \
-H 'Authorization: YOUR_TOKEN' \
'https://api.quave.cloud/api/public/v1/credential?credentialId=CREDENTIAL_ID'

409 response example:

{
"error": "Credential is still in use",
"references": {
"apps": [{ "appId": "...", "name": "my-app", "field": "imagePullAccountSecretId" }],
"envs": [],
"hosts": []
}
}

Sync Credential

Re-pushes a credential to every active region the account uses. Useful after editing a credential or when a previous sync shows an Error status.

curl -X POST \
-H 'Authorization: YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{ "credentialId": "CREDENTIAL_ID" }' \
https://api.quave.cloud/api/public/v1/credential/sync

Response:

{
"attempted": 3,
"ok": 3,
"failed": 0
}

List Credential References

Lists all apps, environments, and hosts that reference a specific credential.

curl -X GET \
-H 'Authorization: YOUR_TOKEN' \
'https://api.quave.cloud/api/public/v1/credential/references?credentialId=CREDENTIAL_ID'

Response:

{
"references": {
"apps": [{ "appId": "...", "name": "my-app", "field": "imagePullAccountSecretId" }],
"envs": [{ "appEnvId": "...", "envName": "production", "field": "basicAuthAccountSecretId" }],
"hosts": [{ "hostname": "example.com", "field": "certificateAccountSecretId" }]
}
}