KMS Key
Operations for KMS Key lifecycle management.
enable-kms-key
Enable KMS Key
POST /kms-key/{id}/enableEnables a KMS Key by setting its state to “enabled”. It restores the ability to fully use the KMS key for cryptographic operations and key lifecycle operations.
Path parameters
| Name | In | Description |
|---|---|---|
id | path | Must be a valid UUID. |
Responses
200: Key enabled
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
status | string | Allowed values: success, target-registered, already-applied.Default: success. |
Example output
{
"status": "success"
}400: ### Errors
Key Not Found: The request was rejected because the specified KMS Key could not be found.
Key is Pending Deletion: The request was rejected because it was performed on a key that is pending deletion.
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
detail | string | A highly contextual, readable explanation breaking down explicitly what triggered this error scenario. |
status | integer | Min: 100. Max: 599. |
title | string | A brief summary defining the class of failure, optimal for quick user interface groupings. |
type | string | An absolute or relative URI reference pointing to human-readable documentation concerning the specific problem type encountered. Must be a valid URI reference. |
Example output
{
"detail": "string",
"status": 0,
"title": "string",
"type": "string"
}SDK reference for enable-kms-key: golang | Python | Java
CLI: exo api enable-kms-key
disable-kms-key
Disable KMS Key
POST /kms-key/{id}/disableDisables a KMS Key by setting its state to “disabled”. This prevents the use of the KMS key for cryptographic and key lifecycle operations.
Path parameters
| Name | In | Description |
|---|---|---|
id | path | Must be a valid UUID. |
Responses
200: Key disabled
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
status | string | Allowed values: success, target-registered, already-applied.Default: success. |
Example output
{
"status": "success"
}400: ### Errors
Key Not Found: The request was rejected because the specified KMS Key could not be found.
Key is Pending Deletion: The request was rejected because it was performed on a key that is pending deletion.
Not on Default: The request was rejected because the operation is not allowed on the default key.
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
detail | string | A highly contextual, readable explanation breaking down explicitly what triggered this error scenario. |
status | integer | Min: 100. Max: 599. |
title | string | A brief summary defining the class of failure, optimal for quick user interface groupings. |
type | string | An absolute or relative URI reference pointing to human-readable documentation concerning the specific problem type encountered. Must be a valid URI reference. |
Example output
{
"detail": "string",
"status": 0,
"title": "string",
"type": "string"
}SDK reference for disable-kms-key: golang | Python | Java
CLI: exo api disable-kms-key
create-kms-key
Create KMS Key
POST /kms-keyCreate a customer-managed unique KMS Key in your organization. A KMS Key is a logical representation of a cryptographic key material. It also includes metadata such as a UUID, a name and its state.
Request body
Content-Type: application/json
| Property | Type | Required | Description |
|---|---|---|---|
name | string | yes | A human-readable display name uniquely identifying the KMS key within the tenant space. |
description | string | no | An optional detailed description providing additional context about the key’s intended use case. |
multi-zone | boolean | no | True if this is a multi-zone key. Default: false. |
usage | string | no | Allowed values: encrypt-decrypt.Default: encrypt-decrypt. |
Example
{
"description": "string",
"multi-zone": true,
"name": "string",
"usage": "encrypt-decrypt"
}Responses
200: Created new KMS key
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
created-at | string | The UTC timestamp showing when the KMS key was originally provisioned. ISO 8601 date-time. |
description | string | An optional detailed description providing additional context about the key’s intended use case. |
id | string | The globally unique identifier (UUID) assigned to the newly created KMS key. Must be a valid UUID. |
multi-zone | boolean | True if this is a multi-zone key. |
name | string | The display name assigned to the KMS key. |
origin-zone | string | The creation zone of the KMS key. |
revision | Revision Stamp | |
source | string | Allowed values: exoscale-kms. |
status | string | Allowed values: enabled, disabled, pending-deletion. |
status-since | string | The timestamp indicating exactly when the current key status was last transitioned. ISO 8601 date-time. |
usage | string | The cryptographic operation constraints allowed on this key. |
Example output
{
"created-at": "2024-01-01T12:00:00Z",
"description": "string",
"id": "string",
"multi-zone": true,
"name": "string",
"origin-zone": "string",
"revision": {
"at": "2024-01-01T12:00:00Z",
"seq": 0
},
"source": "exoscale-kms",
"status": "enabled",
"status-since": "2024-01-01T12:00:00Z",
"usage": "string"
}400: ### Errors
Name Conflict: The request was rejected because a key with the same name already exists in the target zone.
Bad Request: The request was rejected because of an invalid request body or path parameter.
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
detail | string | A highly contextual, readable explanation breaking down explicitly what triggered this error scenario. |
status | integer | Min: 100. Max: 599. |
title | string | A brief summary defining the class of failure, optimal for quick user interface groupings. |
type | string | An absolute or relative URI reference pointing to human-readable documentation concerning the specific problem type encountered. Must be a valid URI reference. |
Example output
{
"detail": "string",
"status": 0,
"title": "string",
"type": "string"
}SDK reference for create-kms-key: golang | Python | Java
CLI: exo api create-kms-key
get-kms-key
Get KMS Key
GET /kms-key/{id}Retrieve KMS Key details.
Path parameters
| Name | In | Description |
|---|---|---|
id | path | Must be a valid UUID. |
Responses
200: KMS Key Details
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
created-at | string | The UTC timestamp showing when the KMS key was originally provisioned. ISO 8601 date-time. |
delete-at | string | ISO 8601 date-time. |
description | string | An optional detailed description providing additional context about the key’s intended use case. |
id | string | The globally unique identifier (UUID) of the retrieved KMS key. Must be a valid UUID. |
material | Key Material | |
multi-zone | boolean | True if this is a multi-zone key. |
name | string | The display name of the KMS key. |
origin-zone | string | The creation zone of the KMS key. |
replicas | array[string] | A list of availability zones where this specific key has active replica mirrors. |
replicas-status | array of Replica State | Detailed synchronization metrics for each regional replica mirror. |
revision | Revision Stamp | |
rotation | Key Rotation Config | |
source | string | Allowed values: exoscale-kms. |
status | string | Allowed values: enabled, disabled, pending-deletion. |
status-since | string | The timestamp indicating exactly when the current key status was last transitioned. ISO 8601 date-time. |
usage | string | The cryptographic operation constraints allowed on this key. |
Example output
{
"created-at": "2024-01-01T12:00:00Z",
"delete-at": "2024-01-01T12:00:00Z",
"description": "string",
"id": "string",
"material": {
"automatic": true,
"created-at": "2024-01-01T12:00:00Z",
"version": 0
},
"multi-zone": true,
"name": "string",
"origin-zone": "string",
"replicas": [
"string"
],
"replicas-status": [
{
"last-applied-watermark": 0,
"last-failure": {
"attempted-watermark": 0,
"error": "string",
"failed-at": "2024-01-01T12:00:00Z"
},
"zone": "string"
}
],
"revision": {
"at": "2024-01-01T12:00:00Z",
"seq": 0
},
"rotation": {
"automatic": true,
"manual-count": 0,
"next-at": "2024-01-01T12:00:00Z",
"rotation-period": 0
},
"source": "exoscale-kms",
"status": "enabled",
"status-since": "2024-01-01T12:00:00Z",
"usage": "string"
}400: ### Errors
Key Not Found: The request was rejected because the specified KMS Key could not be found.
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
detail | string | A highly contextual, readable explanation breaking down explicitly what triggered this error scenario. |
status | integer | Min: 100. Max: 599. |
title | string | A brief summary defining the class of failure, optimal for quick user interface groupings. |
type | string | An absolute or relative URI reference pointing to human-readable documentation concerning the specific problem type encountered. Must be a valid URI reference. |
Example output
{
"detail": "string",
"status": 0,
"title": "string",
"type": "string"
}SDK reference for get-kms-key: golang | Python | Java
CLI: exo api get-kms-key
disable-kms-key-rotation
Disable Key Rotation
POST /kms-key/{id}/disable-key-rotationDisable the periodic rotation of a KMS Key.
Path parameters
| Name | In | Description |
|---|---|---|
id | path | Must be a valid UUID. |
Responses
200: Key rotation disabled
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
rotation | Key Rotation Config |
Example output
{
"rotation": {
"automatic": true,
"manual-count": 0,
"next-at": "2024-01-01T12:00:00Z",
"rotation-period": 0
}
}400: ### Errors
Invalid Origin: The request was rejected because automatic key rotation can only be enabled on a KMS key with origin “exoscale-kms”.
Key Not Found: The request was rejected because the specified KMS Key could not be found.
Not on Default: The request was rejected because the operation is not allowed on the default key.
Not on Replica: The request was rejectde because the operation is not allowed on a replica.
Key is Pending Deletion: The request was rejected because it was performed on a key that is pending deletion.
Key is Disabled: The request was rejected because the specified KMS key is disabled.
Invalid Usage: The request was rejected because the operation is only allowed on symmetric keys with usage “encrypt-decrypt”.
Conflict: The request was rejected because the automatic rotation is already enabled for this KMS Key.
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
detail | string | A highly contextual, readable explanation breaking down explicitly what triggered this error scenario. |
status | integer | Min: 100. Max: 599. |
title | string | A brief summary defining the class of failure, optimal for quick user interface groupings. |
type | string | An absolute or relative URI reference pointing to human-readable documentation concerning the specific problem type encountered. Must be a valid URI reference. |
Example output
{
"detail": "string",
"status": 0,
"title": "string",
"type": "string"
}SDK reference for disable-kms-key-rotation: golang | Python | Java
CLI: exo api disable-kms-key-rotation
enable-kms-key-rotation
Enable Key Rotation
POST /kms-key/{id}/enable-key-rotationEnable the periodic rotation of a KMS Key.
Path parameters
| Name | In | Description |
|---|---|---|
id | path | Must be a valid UUID. |
Request body
Content-Type: application/json
| Property | Type | Required | Description |
|---|---|---|---|
rotation-period | integer | no | The number of days between each automatic key rotation. Min: 90. Max: 2560. Default: 365. |
Example
{
"rotation-period": 0
}Responses
200: Periodic key rotation enabled
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
rotation | Key Rotation Config |
Example output
{
"rotation": {
"automatic": true,
"manual-count": 0,
"next-at": "2024-01-01T12:00:00Z",
"rotation-period": 0
}
}400: ### Errors
Invalid Origin: The request was rejected because automatic key rotation can only be enabled on a KMS key with origin “exoscale-kms”.
Key Not Found: The request was rejected because the specified KMS Key could not be found.
Not on Default: The request was rejected because the operation is not allowed on the default key.
Not on Replica: The request was rejectde because the operation is not allowed on a replica.
Key is Pending Deletion: The request was rejected because it was performed on a key that is pending deletion.
Key is Disabled: The request was rejected because the specified KMS key is disabled.
Invalid Usage: The request was rejected because the operation is only allowed on symmetric keys with usage “encrypt-decrypt”.
Conflict: The request was rejected because the automatic rotation is already enabled for this KMS Key.
Bad Request: The request was rejected because of an invalid request body or path parameter.
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
detail | string | A highly contextual, readable explanation breaking down explicitly what triggered this error scenario. |
status | integer | Min: 100. Max: 599. |
title | string | A brief summary defining the class of failure, optimal for quick user interface groupings. |
type | string | An absolute or relative URI reference pointing to human-readable documentation concerning the specific problem type encountered. Must be a valid URI reference. |
Example output
{
"detail": "string",
"status": 0,
"title": "string",
"type": "string"
}SDK reference for enable-kms-key-rotation: golang | Python | Java
CLI: exo api enable-kms-key-rotation
Other Operations
cancel-kms-key-deletion
Cancel KMS Key Deletion
POST /kms-key/{id}/cancel-deletionCancels the scheduled deletion of a KMS Key.
Path parameters
| Name | In | Description |
|---|---|---|
id | path | Must be a valid UUID. |
Responses
200: Key deletion cancelled
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
status | string | Allowed values: success, target-registered, already-applied.Default: success. |
Example output
{
"status": "success"
}400: ### Errors
Key Not Found: The request was rejected because the specified KMS Key could not be found.
Not on Replica: The request was rejectde because the operation is not allowed on a replica.
Not Pending Deletion: The request was rejected because the key is not pending deletion.
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
detail | string | A highly contextual, readable explanation breaking down explicitly what triggered this error scenario. |
status | integer | Min: 100. Max: 599. |
title | string | A brief summary defining the class of failure, optimal for quick user interface groupings. |
type | string | An absolute or relative URI reference pointing to human-readable documentation concerning the specific problem type encountered. Must be a valid URI reference. |
Example output
{
"detail": "string",
"status": 0,
"title": "string",
"type": "string"
}SDK reference for cancel-kms-key-deletion: golang | Python | Java
CLI: exo api cancel-kms-key-deletion
list-kms-key-rotations
List KMS Key Rotations
GET /kms-key/{id}/list-key-rotationsList all the key material versions of a KMS Key.
Path parameters
| Name | In | Description |
|---|---|---|
id | path | Must be a valid UUID. |
Responses
200: The list of all historical rotations for the requested KMS key.
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
rotations | array of List Kms Key Rotations Response Entry | A chronologically ordered collection tracking historical rotation lifecycle occurrences for this resource. |
Example output
{
"rotations": [
{
"automatic": true,
"rotated-at": "2024-01-01T12:00:00Z",
"version": 0
}
]
}400: ### Errors
Key Not Found: The request was rejected because the specified KMS Key could not be found.
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
detail | string | A highly contextual, readable explanation breaking down explicitly what triggered this error scenario. |
status | integer | Min: 100. Max: 599. |
title | string | A brief summary defining the class of failure, optimal for quick user interface groupings. |
type | string | An absolute or relative URI reference pointing to human-readable documentation concerning the specific problem type encountered. Must be a valid URI reference. |
Example output
{
"detail": "string",
"status": 0,
"title": "string",
"type": "string"
}SDK reference for list-kms-key-rotations: golang | Python | Java
CLI: exo api list-kms-key-rotations
list-kms-keys
List KMS Keys
GET /kms-keyLists all KMS Keys in your organization in a given zone.
Responses
200: A list of all KMS keys in the target zone
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
kms-keys | array of List Kms Keys Response Entry | An array containing metadata entries for all available keys for your organization in the requested zone. |
Example output
{
"kms-keys": [
{
"created-at": "2024-01-01T12:00:00Z",
"delete-at": "2024-01-01T12:00:00Z",
"description": "string",
"id": "string",
"material": {
"automatic": true,
"created-at": "2024-01-01T12:00:00Z",
"version": 0
},
"multi-zone": true,
"name": "string",
"origin-zone": "string",
"replicas": [
"string"
],
"revision": {
"at": "2024-01-01T12:00:00Z",
"seq": 0
},
"rotation": {
"automatic": true,
"manual-count": 0,
"next-at": "2024-01-01T12:00:00Z",
"rotation-period": 0
},
"source": "exoscale-kms",
"status": "enabled",
"status-since": "2024-01-01T12:00:00Z",
"usage": "string"
}
]
}400: ### Errors
Bad Request: The request was rejected because of an invalid request body or path parameter.
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
detail | string | A highly contextual, readable explanation breaking down explicitly what triggered this error scenario. |
status | integer | Min: 100. Max: 599. |
title | string | A brief summary defining the class of failure, optimal for quick user interface groupings. |
type | string | An absolute or relative URI reference pointing to human-readable documentation concerning the specific problem type encountered. Must be a valid URI reference. |
Example output
{
"detail": "string",
"status": 0,
"title": "string",
"type": "string"
}SDK reference for list-kms-keys: golang | Python | Java
CLI: exo api list-kms-keys
replicate-kms-key
Replicate KMS Key
POST /kms-key/{id}/replicateReplicate a KMS key to a target zone.
Path parameters
| Name | In | Description |
|---|---|---|
id | path | Must be a valid UUID. |
Request body
Content-Type: application/json
| Property | Type | Required | Description |
|---|---|---|---|
zone | string | yes | The targeted cloud zone where the KMS key should be replicated. |
Example
{
"zone": "string"
}Responses
200: Key replication target registered
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
status | string | Allowed values: success, target-registered, already-applied.Default: success. |
Example output
{
"status": "success"
}400: ### Errors
Key Not Found: The request was rejected because the specified KMS Key could not be found.
Key is Pending Deletion: The request was rejected because it was performed on a key that is pending deletion.
Not on Default: The request was rejected because the operation is not allowed on the default key.
Not Multizone: The request was rejected because the KMS key is not a multi-zone key.
Conflict: The request was rejected because the key is already replicated in the target zone.
Invalid Argument: The request was rejected because the target zone is invalid.
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
detail | string | A highly contextual, readable explanation breaking down explicitly what triggered this error scenario. |
status | integer | Min: 100. Max: 599. |
title | string | A brief summary defining the class of failure, optimal for quick user interface groupings. |
type | string | An absolute or relative URI reference pointing to human-readable documentation concerning the specific problem type encountered. Must be a valid URI reference. |
Example output
{
"detail": "string",
"status": 0,
"title": "string",
"type": "string"
}SDK reference for replicate-kms-key: golang | Python | Java
CLI: exo api replicate-kms-key
rotate-kms-key
Rotate Key
POST /kms-key/{id}/rotatePerforms an immediate rotation of the key material for a symmetric key.
Path parameters
| Name | In | Description |
|---|---|---|
id | path | Must be a valid UUID. |
Responses
200: Key rotated
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
rotation | Key Rotation Config |
Example output
{
"rotation": {
"automatic": true,
"manual-count": 0,
"next-at": "2024-01-01T12:00:00Z",
"rotation-period": 0
}
}400: ### Errors
Key Not Found: The request was rejected because the specified KMS Key could not be found.
Key is Pending Deletion: The request was rejected because it was performed on a key that is pending deletion.
Not on a Replica: The request was rejected because the operation is not allowed on a replica.
Invalid Usage: The request was rejected because the operation is only allowed on symmetric keys with usage “encrypt-decrypt”.
Key is Disabled: The request was rejected because the specified KMS key is disabled.
Manual Rotation Limit: The request was rejected because you reached your limit of 10 manual rotations per key for this KMS key.
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
detail | string | A highly contextual, readable explanation breaking down explicitly what triggered this error scenario. |
status | integer | Min: 100. Max: 599. |
title | string | A brief summary defining the class of failure, optimal for quick user interface groupings. |
type | string | An absolute or relative URI reference pointing to human-readable documentation concerning the specific problem type encountered. Must be a valid URI reference. |
Example output
{
"detail": "string",
"status": 0,
"title": "string",
"type": "string"
}SDK reference for rotate-kms-key: golang | Python | Java
CLI: exo api rotate-kms-key
schedule-kms-key-deletion
Schedule KMS Key Deletion
POST /kms-key/{id}/schedule-deletionSchedules a KMS key for deletion after a delay. You can specify a delay of 7-30 days.
Path parameters
| Name | In | Description |
|---|---|---|
id | path | Must be a valid UUID. |
Request body
Content-Type: application/json
| Property | Type | Required | Description |
|---|---|---|---|
delay-days | integer | no | Number of days to wait until deletion is final. Min: 7. Max: 30. Default: 30. |
Example
{
"delay-days": 0
}Responses
200: Key deletion scheduled
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
delete-at | string | Timestamp of the key deletion ISO 8601 date-time. |
Example output
{
"delete-at": "2024-01-01T12:00:00Z"
}400: ### Errors
Key Not Found: The request was rejected because the specified KMS Key could not be found.
Not on Default: The request was rejected because the operation is not allowed on the default key.
Not on Replica: The request was rejectde because the operation is not allowed on a replica.
Bad Request: The request was rejected because of an invalid request body or path parameter.
Content-Type: application/json
| Property | Type | Description |
|---|---|---|
detail | string | A highly contextual, readable explanation breaking down explicitly what triggered this error scenario. |
status | integer | Min: 100. Max: 599. |
title | string | A brief summary defining the class of failure, optimal for quick user interface groupings. |
type | string | An absolute or relative URI reference pointing to human-readable documentation concerning the specific problem type encountered. Must be a valid URI reference. |
Example output
{
"detail": "string",
"status": 0,
"title": "string",
"type": "string"
}SDK reference for schedule-kms-key-deletion: golang | Python | Java
CLI: exo api schedule-kms-key-deletion