Verda Cloud Public API
- OpenAPI Version:
3.1.0 - API Version:
v1
Introduction
Verda Cloud (formerly DataCrunch) API allows you to deploy, control instances & more via external code.
Open API schema
Download OpenAPI 3.1.0 schema here: /v1/openapi.json
The API is a RESTful API over HTTPS, all requests & responses use JSON as the data exchange format.
Official SDKs
The following SDK packages maintained by Verda Cloud and use this API:
- Python SDK: https://github.com/verda-cloud/sdk-python
- Go SDK: https://github.com/verda-cloud/verdacloud-sdk-go
- Terraform and OpenTofu provider: https://github.com/verda-cloud/terraform-provider-verda
Quick Start Guide
We use OAuth 2.0 Client Credentials authentication scheme.
You can generate credentials via the console UI https://console.verda.com for external applications to use Verda API. The credentials are used to generate Access & Refresh tokens. All requests to this API must be authenticated using the Access token, except for a few open endpoints. Access tokens have a short lifespan, and can be regenerated using the Refresh token.
1. Get Credentials from the Verda Cloud Dashboard
Go to the Project page => Keys => Cloud API Credentials section and click on Create.
These credentials will be used like a username & password for your application. Store the client secret safely - like a password.
2. Generate Access Token
An Access Token is needed to be sent with any API call for authentication. The Access Token has a limited lifetime and is expired after a while as defined in expires_in.
It is used as a bearer token
To get an access token, call the token endpoint with the credentials obtained in step 1:
{
"method": "post",
"url": "https://api.verda.com/v1/oauth2/token",
"headers": {
"Content-Type": "application/json"
},
"body": {
"grant_type": "client_credentials",
"client_id": "<YOUR_CLIENT_ID>",
"client_secret": "<YOUR_CLIENT_SECRET>"
}
}
A valid response would look similar to this:
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJoZXkiOiJ5b3UgYWN1YWxseSBjaGVja2VkIHRoaXM_In0.0RjcdKQ1NJP9gbRyXITE6LFFLwKGzeeshuubnkkfkb8",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ3b3ciOiJhbmQgdGhpcyB0b28_In0.AC5gk-o-MOptUgrouEErlhr8WT3Hg_RR6px6A0I7ZEk",
"scope": "cloud-api-v1"
}
access_token is the token value, to be used in the next step.
expires_in is the duration in seconds until the token is expired.
refresh_token can be used to create a new access token if expired.
When an Access Token expires, create a new one using the refresh token:
{
"method": "post",
"url": "https://api.verda.com/v1/oauth2/token",
"headers": {
"Content-Type": "application/json"
},
"body": {
"grant_type": "refresh_token",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ3b3ciOiJhbmQgdGhpcyB0b28_In0.AC5gk-o-MOptUgrouEErlhr8WT3Hg_RR6px6A0I7ZEk"
}
}
The response will include a new token.
3. Make REST API Calls
That's it, you are ready to use the API, don't forget to add the Access Token to your calls:
Let's call the /balance endpoint.
Add the Access Token value to the Authorization header, preceded by the "Bearer" string and a space:
{
"method": "get",
"url": "https://api.verda.com/v1/balance",
"headers": {
"Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJoZXkiOiJ5b3UgYWN1YWxseSBjaGVja2VkIHRoaXM_In0.0RjcdKQ1NJP9gbRyXITE6LFFLwKGzeeshuubnkkfkb8"
}
}
Rate Limits
Authenticated public API requests are rate limited per project in 60 second windows.
Limits enforced
- Project limit: 500 requests per minute for all authenticated API requests made for the same project
- Endpoint limit: 60 requests per minute for the same project, HTTP method, and request path combination
The endpoint limit key includes the full request path. Route-specific endpoint policies override the regular endpoint limit for the matching request path.
Headers
Rate limit information is returned in response headers on authenticated requests:
RateLimit-Policy: configured limits and windowRateLimit: current remaining quota and reset time per limit
If a limit is exceeded, the API will return HTTP 429 Too Many Requests and also include a Retry-After header with the number of seconds until requests are allowed again.
Example of successful response with rate limits policy specified
curl -X GET --verbose https://api.verda.com/v1/instances
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 213
RateLimit-Policy: "project";q=500;w=60, "endpoint";q=60;w=60
RateLimit: "project";r=486;t=37, "endpoint";r=48;t=37
{...}
Example of throttled response
curl -X GET --verbose https://api.verda.com/v1/instances
HTTP/1.1 429 Too Many Requests
Content-Type: application/json; charset=utf-8
Content-Length: 11
RateLimit-Policy: "project";q=500;w=60, "endpoint";q=50;w=60
RateLimit: "project";r=419;t=44, "endpoint";r=0;t=49
Retry-After: 49
Pagination
Some endpoints support pagination using the page and pageSize query parameters. For backward compatibility, pagination does not change the JSON response payload format. Instead, clients request a page with query parameters and read pagination metadata from response headers.
Request and response format
page:1pageSize:10(can be extended to a maximum of 100 records per page)
When pagination is available, the response includes these headers:
X-Page: current page numberX-Page-Size: current page sizeX-Total-Count: total number of matching items
Example request:
GET /v1/scripts?page=1&pageSize=100
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 11111
X-Page: 1
X-Page-Size: 100
X-Total-Count: 10000
[{ "id": "2b1af58-7537-4edb-ba81-82cee082c5e9", "name": "My startup script" }]
Errors
Error response body has following schema:
| Key | Info |
|---|---|
| code | Error type |
| message | Textual description of the error details |
Error types
| Code | Description | Matching HTTP error code |
|---|---|---|
| invalid_request | Invalid request, usually an input error - missing or invalid property etc. | 400 |
| unauthorized_request | Access token is missing or invalid | 401 |
| insufficient_funds | Not enough funds to perform the action | 402 |
| forbidden_action | Can't perform the current action | 403 |
| not_found | Resource not found, or invalid path | 404 |
| rate_limit_exceeded | Too many requests for the current project or endpoint window | 429 |
| server_error | Error on datacrunch's side | 500 |
| service_unavailable | Not enough resources at the moment, try again later or use a different resource | 503 |
Changelog
2026-03-30 Startup script quota and pagination
Total number of startup scripts in a project now limited by a per-user quota with a default of 100 scripts and a hard maximum of 1000.
GET /v1/scripts now supports pagination via the page and pageSize query parameters. For backward compatibility, the response payload shape is unchanged and pagination metadata is returned in headers instead. See the Pagination section for details.
2026-03-20 Scope-based access control for API tokens
API tokens created via the OAuth 2.0 Client Credentials flow are now issued with the scope cloud-api-v1 and restricted to documented Public API endpoints only. Previously, these tokens could access internal endpoints not intended for external use. If you are using API tokens for any undocumented endpoints, those requests will now return 403 Forbidden with "Insufficient scope". Only the endpoints listed in this API documentation are accessible with API tokens.
2026-03-20 Long term periods endpoints
GET /v1/long-term/periods is now deprecated. Use the dedicated endpoints instead:
- GET /v1/long-term/periods/instances — long term periods for instances
- GET /v1/long-term/periods/clusters — long term periods for clusters
Improved OpenAPI documentation for all long term period endpoints with detailed property descriptions and examples.
2026-03-19 Property location_code is now required
The location_code property is now required in the request body when creating instances, clusters, and volumes via the Public API. Requests that omit it will receive an HTTP 400 Bad Request response instead of silently defaulting to FIN-01. This brings the API in line with the SDK, where specifying a region has always been mandatory.
Breakdown of API changes:
| Description | Endpoint | Schema change |
|---|---|---|
| Deploy instance | POST /v1/instances |
{ /* required */ location_code: string, ... } |
| Deploy cluster | POST /v1/clusters |
{ /* required */ location_code: string, ... } |
| Create block volume or SFS | POST /v1/volumes |
{ /* required */ location_code: string, ... } |
2026-03-19 OpenAPI spec auth fix
Fixed the OpenAPI specification incorrectly requiring bearer authentication on public endpoints (/v1/instance-types, /v1/cluster-types, /v1/container-types, /v1/long-term/periods). These endpoints are publicly accessible and no longer show an authentication requirement in the spec.
2026-03-16 Volume response improvements
GET /v1/volumes/{id} now includes is_permanently_deleted and deleted_at fields when the volume is in deleted status. These fields are omitted for active volumes. The OpenAPI schema for this endpoint now uses oneOf to distinguish between the active-volume and deleted-volume response shapes.
2026-03-12 Improved instance action and volume deletion responses
Bulk instance actions (PUT /v1/instances) now return structured per-action results. Each result includes the instance id, a status (success or error), and an error message when applicable. When all actions succeed the response is 202 Accepted; when some fail, you receive a 207 Multi-Status with individual outcomes. A single-instance action that is already in the requested state now returns 204 No Content instead of an error.
Volume deletion (DELETE /v1/volumes/{id}) now returns 204 No Content when the volume is already deleted, making the operation idempotent.
OpenAPI schema fields that accept both a single UUID string and an array of UUIDs (id, ssh_key_ids, volume_ids) are now documented with oneOf for accurate client generation.
2026-03-11 API rate limits
Introduced rate limits to our Public API to ensure the stability of our API and platform for everyone. Rate limits are restrictions our API enforces on how frequently a user or client can make requests to our services within a given timeframe.
Please take a look at our API documentation section "Rate limits".
2026-02-03 Spot instance volume policy
When creating a spot instance, it is now possible to specify a removal policy for the OS volume and any additional volumes created alongside it. Use the on_spot_discontinue field:
POST v1/instances
{
"instance_type": "CPU.4V.16G",
"image": "ubuntu-24.04",
"ssh_key_ids": ["442e6a59-26c2-4cea-a619-39762c0d2385"],
"hostname": "test-instance",
"location_code": "FIN-03",
"is_spot": true,
"os_volume": {
"name": "test-instance-os-volume",
"size": 55,
// If "delete_permanently", the volume will be deleted when the spot instance is discontinued
"on_spot_discontinue": "keep_detached" | "move_to_trash" | "delete_permanently"
}
}
2026-02-03 Delete volumes permanently when deleting an instance
When deleting an instance, you can now specify whether its volumes should be moved to deleted storage (default) or deleted permanently:
PUT v1/instances
{
"action": "delete",
"id": "442e6a59-26c2-4cea-a619-39762c0d2385",
"volume_ids": ["5e9e63a9-fc3b-427b-b259-0c77dce61090"],
// Will delete the instance and volumes permanently
"delete_permanently": true
}
Servers
- URL:
http://localhost:3010
Operations
Get access token
- Method:
POST - Path:
/v1/oauth2/token - Tags: Authentication
Get access token for public API using client credentials or refresh token.You can manage your credentials at https://console.verda.com, under the Keys => Cloud API credentials section.
Request Body
Content-Type: application/json
One of:
client_id(required)stringclient_secret(required)stringgrant_type(required)string, possible values:"client_credentials", "refresh_token"
grant_type(required)string, possible values:"client_credentials", "refresh_token"refresh_token(required)string
Example:
{
"grant_type": "client_credentials",
"client_id": "6a51jsgnISg6JOyE7wYZh",
"client_secret": "TvSBFujsqloJb4Jbcezths1OPK9my3zodM3zot9Fn5"
}
Responses
Status: 200 Valid credentials
Content-Type: application/json
access_token(required)string— Access token valueexpires_in(required)number— Token expiration time in secondsrefresh_token(required)string— Refresh token valuescope(required)string— Access scopetoken_type(required)string— Token type
Example:
{
"access_token": "eyJhbGciOiJIUzI1NiI...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "OU4O2BwA690cKg2OfGS8pgIfGSTD2vJ...",
"scope": "cloud-api-v1"
}
Status: 400 Invalid request
Content-Type: application/json
code(required)string, possible values:"invalid_request", "unauthorized_request", "insufficient_funds", "forbidden_action", "not_found", "conflict", "server_error", "service_unavailable"message(required)string— Error message
Example:
{
"code": "invalid_request",
"message": ""
}
Status: 401 Unauthorized
Content-Type: application/json
code(required)string, possible values:"invalid_request", "unauthorized_request", "insufficient_funds", "forbidden_action", "not_found", "conflict", "server_error", "service_unavailable"message(required)string— Error message
Example:
{
"code": "invalid_request",
"message": ""
}
Get project balance
- Method:
GET - Path:
/v1/balance - Tags: Balance
Responses
Status: 200 Returns the project balance
Content-Type: application/json
amount(required)number— Project balancecurrency(required)string, possible values:"usd", "eur", default:"usd"— Currency type
Example:
{
"amount": 1000,
"currency": "usd"
}
Get images types for instances
- Method:
GET - Path:
/v1/images - Tags: Images, OS Images
Responses
Status: 200 Returns available image types for instances
Content-Type: application/json
Array of:
category(required)string— Image categorydetails(required)array— Image detailsItems:
stringid(required)string— Image idimage_type(required)string— Image typeis_cluster(required)boolean— Is clusteris_default(required)boolean— Is default imagename(required)string— Image name
Example:
[
{
"id": "342377e1-9f51-4c30-8797-1e12f6ae1d22",
"image_type": "ubuntu-24.04",
"name": "Ubuntu 24.04",
"is_default": false,
"details": [
"Ubuntu 24.04",
"Minimal Image"
],
"category": "ubuntu",
"is_cluster": false
}
]
Status: 404 Instance type not found
Get images types for cluster
- Method:
GET - Path:
/v1/images/cluster - Tags: Images, Clusters
Responses
Status: 200 Returns available image types for cluster
Content-Type: application/json
Array of:
category(required)string— Image categorydetails(required)array— Image detailsItems:
stringid(required)string— Image idimage_type(required)string— Image typeis_cluster(required)boolean— Is clusteris_default(required)boolean— Is default imagename(required)string— Image name
Example:
[
{
"id": "342377e1-9f51-4c30-8797-1e12f6ae1d22",
"image_type": "ubuntu-24.04",
"name": "Ubuntu 24.04",
"is_default": false,
"details": [
"Ubuntu 24.04",
"Minimal Image"
],
"category": "ubuntu",
"is_cluster": false
}
]
Status: 404 Instance type not found
Get all volumes
- Method:
GET - Path:
/v1/volumes - Tags: Volumes
Responses
Status: 200 Returns a list of all volumes ### Rate limits This endpoint is rate limited to 120 requests per minute per project.
Content-Type: application/json
Array of:
base_hourly_cost(required)number— Volume base hourly costcontract(required)string— Volume contract typecreate_directory_command(required)string— Create directory commandcreated_at(required)string— Volume creation datecurrency(required)string, possible values:"usd", "eur"— Volume currencyfilesystem_to_fstab_command(required)string— Filesystem to fstab commandid(required)string— Volume IDinstance_id(required)string— Instance IDinstances(required)array— Instance info the volume is attached toItems:
stringis_os_volume(required)boolean— Is OS volumelocation(required)string— Volume locationlong_term(required)object— Long term contract detailsmonthly_price(required)number— Volume monthly pricemount_command(required)string— Mount commandname(required)string— Volume namepseudo_path(required)string— Volume pseudo path. Unique identifier for your filesystemsize(required)number— Volume size in GBssh_key_ids(required)array— Array of SSH key IDs that are linked to the volume if it is an OS volumeItems:
stringstatus(required)string, possible values:"ordered", "attached", "attaching", "detached", "deleted", "cloning", "detaching", "deleting", "restoring", "created", "exported", "canceled", "canceling"— Volume statustarget(required)string— Volume targettype(required)string, possible values:"HDD", "NVMe", "HDD_Shared", "NVMe_Shared", "NVMe_Local_Storage", "NVMe_Shared_Cluster", "NVMe_OS_Cluster"— Volume type
Example:
[
{
"id": "9609bc1b-e199-4820-8ab8-fdcfe9a4fd65",
"instance_id": "19edab71-4fe5-4e29-ae7c-5c4d0776aad1",
"instances": [
{
"id": "19edab71-4fe5-4e29-ae7c-5c4d0776aad1",
"auto_rental_extension": null,
"ip": "123.123.123.123",
"instance_type": "4A100.88V",
"status": "running",
"os_volume_id": "25daef82-f821-4a43-82a5-1e15c7e701b5",
"hostname": "hazy-star-swims-fin-01"
}
],
"name": "OS-NVMe-84Ca37Jf",
"created_at": "2024-07-08T19:19:54.247Z",
"status": "attached",
"size": 100,
"is_os_volume": true,
"target": "vda",
"type": "NVMe",
"location": "FIN-01",
"ssh_key_ids": [
"84a57808-bc31-4007-b1ee-4797dc606d97"
],
"pseudo_path": "volume-84Ca37Jf",
"create_directory_command": "mkdir -p /mnt/volume",
"mount_command": "mount -t nfs -o nconnect=16 nfs.fin-01.datacrunch.io:volume-88eb67d0 /mnt/volume",
"filesystem_to_fstab_command": "grep -qxF 'nfs.fin-01.datacrunch.io:volume-88eb67d0 /mnt/volume nfs defaults 0 0' /etc/fstab || echo 'nfs.fin-01.datacrunch.io:volume-88eb67d0 /mnt/volume nfs defaults 0 0' | sudo tee -a /etc/fstab",
"contract": "LONG_TERM",
"base_hourly_cost": 0.0273972602739726,
"monthly_price": 20,
"currency": "eur",
"long_term": {
"end_date": "2025-01-08T19:34:16.663Z",
"long_term_period": "3 months",
"discount_percentage": 14,
"auto_rental_extension": false,
"next_period_price": 49.93356,
"current_period_price": 49.93356
}
}
]
Create volume
- Method:
POST - Path:
/v1/volumes - Tags: Volumes
Request Body
Content-Type: application/json
location_code(required)string— Location codename(required)string— Volume namesize(required)number— Volume size in GBtype(required)string, possible values:"HDD", "NVMe", "HDD_Shared", "NVMe_Shared", "NVMe_Local_Storage", "NVMe_Shared_Cluster", "NVMe_OS_Cluster"— Volume typeinstance_idstring— Instance ID to attach the volume toinstance_idsarray— Array of instance IDs to attach the volume toItems:
string
Example:
{
"type": "NVMe",
"location_code": "FIN-01",
"size": 50,
"instance_id": "13c706c8-7929-4a07-a359-cbe67ee98c0b",
"instance_ids": [
"7af2aabf-1feb-48a3-a4fd-aba8a7cd1712",
"57efe6eb-fa6c-4f9d-8bc2-90fdb434161a"
],
"name": "my-volume"
}
Responses
Status: 202 Volume ID
Content-Type: application/json
Status: 403 One or more of the specified instances is not shut down
Perform action on a volume or multiple volumes
- Method:
PUT - Path:
/v1/volumes - Tags: Volumes
Request Body
Content-Type: application/json
action(required)string, possible values:"attach", "detach", "delete", "rename", "resize", "restore", "clone", "cancel", "create", "export", "transfer"— Action to perform on the volume(s) The `clone` action returns its destination volume ID: `{"id":"..."}`. Send a `cancel` action with that same ID to interrupt a cross-datacenter clone.id(required)object— Volume ID(s) to perform the action on. Single volume id or an array of volume idsinstance_idstring— Instance ID to attach the volume to, if the action is attachinstance_idsarray— Array of instance IDs to attach the volume to, if the action is attachItems:
stringis_permanentboolean— If deleting volume(s), delete them permanentlylocation_codestring— Target location code if cloning the volumenamestring— New volume namesizenumber— New volume size in GB. Can't be lower than current sizetypestring— Target volume type
Example:
{
"action": "detach",
"id": [
"5a10bb0c-dd09-4e7f-b7f4-81d315111077"
],
"size": 100,
"instance_id": "981b5828-64d9-40d8-9e81-12959c7839f5",
"instance_ids": [
"b367e426-99e2-4ad1-a633-4fa81912c4c8",
"4435a7f3-8421-4ae1-a6b1-a2c4906cd646"
],
"name": "volume-name",
"type": "NVMe",
"is_permanent": true,
"location_code": "FIN-01"
}
Responses
Status: 202
Get all volumes that are in trash
- Method:
GET - Path:
/v1/volumes/trash - Tags: Volumes
Responses
Status: 200 Returns a list of all volumes in trash
Content-Type: application/json
Array of:
base_hourly_cost(required)number— Volume base hourly costcontract(required)string— Volume contract typecreated_at(required)string— Volume creation datecurrency(required)string, possible values:"usd", "eur"— Volume currencydeleted_at(required)string— Volume deletion dateid(required)string— Volume IDinstance_id(required)string— Instance IDinstances(required)array— Instance info the volume is attached toItems:
stringis_os_volume(required)boolean— Is OS volumeis_permanently_deleted(required)boolean— Is volume permanently deletedlocation(required)string— Volume locationmonthly_price(required)number— Volume monthly pricename(required)string— Volume namesize(required)number— Volume size in GBssh_key_ids(required)array— Array of SSH key IDs that are linked to the volume if it is an OS volumeItems:
stringstatus(required)string, possible values:"ordered", "attached", "attaching", "detached", "deleted", "cloning", "detaching", "deleting", "restoring", "created", "exported", "canceled", "canceling"— Volume statustarget(required)string— Volume targettype(required)string, possible values:"HDD", "NVMe", "HDD_Shared", "NVMe_Shared", "NVMe_Local_Storage", "NVMe_Shared_Cluster", "NVMe_OS_Cluster"— Volume type
Example:
[
{
"id": "9609bc1b-e199-4820-8ab8-fdcfe9a4fd65",
"instance_id": "19edab71-4fe5-4e29-ae7c-5c4d0776aad1",
"instances": [
{
"id": "19edab71-4fe5-4e29-ae7c-5c4d0776aad1",
"auto_rental_extension": null,
"ip": "123.123.123.123",
"instance_type": "4A100.88V",
"status": "running",
"os_volume_id": "25daef82-f821-4a43-82a5-1e15c7e701b5",
"hostname": "hazy-star-swims-fin-01"
}
],
"name": "OS-NVMe-84Ca37Jf",
"created_at": "2024-07-08T19:19:54.247Z",
"status": "attached",
"size": 100,
"is_os_volume": true,
"target": "vda",
"type": "NVMe",
"location": "FIN-01",
"ssh_key_ids": [
"84a57808-bc31-4007-b1ee-4797dc606d97"
],
"contract": "LONG_TERM",
"base_hourly_cost": 0.0273972602739726,
"monthly_price": 20,
"currency": "eur",
"deleted_at": "2025-01-10T11:35:47.633Z",
"is_permanently_deleted": false
}
]
Get volume by id
- Method:
GET - Path:
/v1/volumes/{volume_id} - Tags: Volumes
Responses
Status: 200 Returns volume details
Content-Type: application/json
One of:
base_hourly_cost(required)number— Volume base hourly costcontract(required)string— Volume contract typecreate_directory_command(required)string— Create directory commandcreated_at(required)string— Volume creation datecurrency(required)string, possible values:"usd", "eur"— Volume currencyfilesystem_to_fstab_command(required)string— Filesystem to fstab commandid(required)string— Volume IDinstance_id(required)string— Instance IDinstances(required)array— Instance info the volume is attached toItems:
stringis_os_volume(required)boolean— Is OS volumelocation(required)string— Volume locationlong_term(required)object— Long term contract detailsmonthly_price(required)number— Volume monthly pricemount_command(required)string— Mount commandname(required)string— Volume namepseudo_path(required)string— Volume pseudo path. Unique identifier for your filesystemsize(required)number— Volume size in GBssh_key_ids(required)array— Array of SSH key IDs that are linked to the volume if it is an OS volumeItems:
stringstatus(required)string, possible values:"ordered", "attached", "attaching", "detached", "deleted", "cloning", "detaching", "deleting", "restoring", "created", "exported", "canceled", "canceling"— Volume statustarget(required)string— Volume targettype(required)string, possible values:"HDD", "NVMe", "HDD_Shared", "NVMe_Shared", "NVMe_Local_Storage", "NVMe_Shared_Cluster", "NVMe_OS_Cluster"— Volume type
base_hourly_cost(required)number— Volume base hourly costcontract(required)string— Volume contract typecreated_at(required)string— Volume creation datecurrency(required)string, possible values:"usd", "eur"— Volume currencydeleted_at(required)string— Volume deletion dateid(required)string— Volume IDinstance_id(required)string— Instance IDinstances(required)array— Instance info the volume is attached toItems:
stringis_os_volume(required)boolean— Is OS volumeis_permanently_deleted(required)boolean— Is volume permanently deletedlocation(required)string— Volume locationmonthly_price(required)number— Volume monthly pricename(required)string— Volume namesize(required)number— Volume size in GBssh_key_ids(required)array— Array of SSH key IDs that are linked to the volume if it is an OS volumeItems:
stringstatus(required)string, possible values:"ordered", "attached", "attaching", "detached", "deleted", "cloning", "detaching", "deleting", "restoring", "created", "exported", "canceled", "canceling"— Volume statustarget(required)string— Volume targettype(required)string, possible values:"HDD", "NVMe", "HDD_Shared", "NVMe_Shared", "NVMe_Local_Storage", "NVMe_Shared_Cluster", "NVMe_OS_Cluster"— Volume type
Example:
{
"id": "9609bc1b-e199-4820-8ab8-fdcfe9a4fd65",
"instance_id": "19edab71-4fe5-4e29-ae7c-5c4d0776aad1",
"instances": [
{
"id": "19edab71-4fe5-4e29-ae7c-5c4d0776aad1",
"auto_rental_extension": null,
"ip": "123.123.123.123",
"instance_type": "4A100.88V",
"status": "running",
"os_volume_id": "25daef82-f821-4a43-82a5-1e15c7e701b5",
"hostname": "hazy-star-swims-fin-01"
}
],
"name": "OS-NVMe-84Ca37Jf",
"created_at": "2024-07-08T19:19:54.247Z",
"status": "attached",
"size": 100,
"is_os_volume": true,
"target": "vda",
"type": "NVMe",
"location": "FIN-01",
"ssh_key_ids": [
"84a57808-bc31-4007-b1ee-4797dc606d97"
],
"pseudo_path": "volume-84Ca37Jf",
"create_directory_command": "mkdir -p /mnt/volume",
"mount_command": "mount -t nfs -o nconnect=16 nfs.fin-01.datacrunch.io:volume-88eb67d0 /mnt/volume",
"filesystem_to_fstab_command": "grep -qxF 'nfs.fin-01.datacrunch.io:volume-88eb67d0 /mnt/volume nfs defaults 0 0' /etc/fstab || echo 'nfs.fin-01.datacrunch.io:volume-88eb67d0 /mnt/volume nfs defaults 0 0' | sudo tee -a /etc/fstab",
"contract": "LONG_TERM",
"base_hourly_cost": 0.0273972602739726,
"monthly_price": 20,
"currency": "eur",
"long_term": {
"end_date": "2025-01-08T19:34:16.663Z",
"long_term_period": "3 months",
"discount_percentage": 14,
"auto_rental_extension": false,
"next_period_price": 49.93356,
"current_period_price": 49.93356
}
}
Delete volume by id
- Method:
DELETE - Path:
/v1/volumes/{volume_id} - Tags: Volumes
Request Body
Content-Type: application/json
is_permanentboolean, default:false— If true, the volume will be removed permanently
Example:
{
"is_permanent": false
}
Responses
Status: 202
Get volume types
- Method:
GET - Path:
/v1/volume-types - Tags: Volume Types
Responses
Status: 200 Returns the list of available volume types
Content-Type: application/json
Array of:
burst_bandwidth(required)number— Burst bandwidthcontinuous_bandwidth(required)number— Continuous bandwidthinternal_network_speed(required)number— Internal network speediops(required)string— IOPSis_shared_fs(required)boolean— Is shared file systemprice(required)object— Price detailsthroughput_gbps(required)number— Throughput in GB/stype(required)string, possible values:"HDD", "NVMe", "HDD_Shared", "NVMe_Shared", "NVMe_Local_Storage", "NVMe_Shared_Cluster", "NVMe_OS_Cluster"— Volume type
Example:
[
{
"type": "NVMe",
"price": {
"price_per_month_per_gb": 0.2,
"cps_per_gb": 7.6103500761035e-8,
"currency": "usd"
},
"is_shared_fs": false,
"burst_bandwidth": 2500,
"continuous_bandwidth": 2000,
"internal_network_speed": 50,
"iops": "100k",
"throughput_gbps": 4
}
]
Get instances
- Method:
GET - Path:
/v1/instances - Tags: Instances
Return all instances of the project, or all instances with a specific status (optional)
Rate limits
This endpoint is rate limited to 120 requests per minute per project.
Responses
Status: 200 Instance or a list of instances
Content-Type: application/json
Array of:
contract(required)string, possible values:"LONG_TERM", "PAY_AS_YOU_GO", "SPOT"cpu(required)objectcreated_at(required)stringdescription(required)stringgpu(required)objectgpu_memory(required)objecthostname(required)stringid(required)stringimage(required)stringinstance_type(required)stringip(required)stringis_spot(required)booleanjupyter_token(required)stringlocation(required)stringmemory(required)objectos_name(required)stringos_volume_id(required)stringprice_per_hour(required)numberpricing(required)string, possible values:"DYNAMIC_PRICE", "FIXED_PRICE"ssh_key_ids(required)arrayItems:
stringstartup_script_id(required)stringstatus(required)string, possible values:"running", "provisioning", "offline", "discontinued", "unknown", "ordered", "notfound", "new", "error", "deleting", "validating", "no_capacity", "installation_failed"storage(required)objectvolume_ids(required)arrayItems:
string
Example:
[
{
"id": "fb68976d-fd34-4b2d-adbe-c205e8e3d1d3",
"ip": "1.2.3.4",
"status": "running",
"created_at": "2023-07-15T14:10:26.654Z",
"cpu": {
"description": "176 CPU",
"number_of_cores": 176
},
"gpu": {
"description": "8x A100",
"number_of_gpus": 8
},
"gpu_memory": {
"description": "80GB GPU RAM",
"size_in_gigabytes": 80
},
"memory": {
"description": "640GB RAM",
"size_in_gigabytes": 640
},
"storage": {
"description": "dynamic"
},
"hostname": "hazy-star-swims-fin-01",
"description": "ubuntu-22-04-cuda-12-0-docker-fin-01",
"location": "FIN-01",
"price_per_hour": 2.481,
"is_spot": false,
"instance_type": "8A100.176V",
"image": "ubuntu-22-04-cuda-12-0-docker",
"os_name": "Ubuntu 22.04",
"startup_script_id": "95cec4c3-af69-42eb-a790-fcacebfdfcea",
"ssh_key_ids": [
"dd50b622-1c36-48c2-a485-f4d4937a3ea1"
],
"os_volume_id": "95cec4c3-af69-42eb-a790-fcacebfdfcea",
"jupyter_token": "b9e6d8517db3a722ccfb309ca599a35f",
"contract": "PAY_AS_YOU_GO",
"pricing": "FIXED_PRICE",
"volume_ids": [
"95cec4c3-af69-42eb-a790-fcacebfdfcea",
"dd50b622-1c36-48c2-a485-f4d4937a3ea1"
]
}
]
Deploy instance
- Method:
POST - Path:
/v1/instances - Tags: Instances
Deploy a new instance.
Before deploying an instance, you need to add at least ssh key to be able to access your instance.
Instance types can be listed using the GET /instance-types endpoint.
Available images can be listed using the GET /images endpoint, using the image_type value from the result.
Existing detached OS volumes could be used as an image, put the volume ID as the image value.
It's also possible to define new volumes that will be created and attached to the new instance. New volumes location will be the same as the instance.
Existing detached volumes can be attached to the deployed instance by adding their IDs to the existing_volumes property.
Request Body
Content-Type: application/json
description(required)stringhostname(required)stringimage(required)string— OS image specification for the created instance. There are two options: 1. OS image type. For a list of supported images, check `GET /images` endpoint, `"image_type"` property. To set the name and size, use `"os_volume"` property. 2. Previously customized OS volume ID. (To create an OS volume, first make an instance with existing `"image"` type. To customize the volume content, ssh into that instance. Finally, delete the instance but keep the volume.)instance_type(required)stringlocation_code(required)string— Location code for the instance and any newly created volumescontractstring, possible values:"LONG_TERM", "PAY_AS_YOU_GO", "SPOT"couponstringexisting_volumesarray— IDs of additional existing detached volumes to attach to this new instance when its created. (To configure instance **OS** volume, use `"image"` and `"os_volume"` properties.)Items:
stringis_spotboolean— Create a spot instance. Spot instances may be evicted by Verda at any time without warning.os_volumeobject— Newly created OS volume name and size (in GB). Use when `"image"` property is an OS image type. Object properties: * `name` - Name of the OS volume * `size` - Size of the OS volume in GB * `on_spot_discontinue` - Removal policy for the OS volume for spot instances. Optional, by default, nothing is deleted. Allowed values: `keep_detached` (default behavior), `move_to_trash` (will be deleted after 96 hours and counts towards the storage volume quota), `delete_permanently` (will be deleted immediately).pricingstring, possible values:"DYNAMIC_PRICE", "FIXED_PRICE"— This field is deprecated as DYNAMIC_PRICE is removed. Only FIXED_PRICE is supported now.ssh_key_idsobjectstartup_script_idstringvolumesarray— Additional (**non-OS**) volumes to create and attach to this new instance. (To configure **OS** volume, use `"image"` and `"os_volume"` properties.)Items:
name(required)stringsize(required)numbertype(required)string, possible values:"HDD", "NVMe", "HDD_Shared", "NVMe_Shared", "NVMe_Local_Storage", "NVMe_Shared_Cluster", "NVMe_OS_Cluster"on_spot_discontinuestring, possible values:"keep_detached", "move_to_trash", "delete_permanently"— Optional, by default, nothing is deleted. Should we automatically delete, if instance is deleted because of spot? Allowed values: * `keep_detached` (default behavior, volume will be detached), * `move_to_trash` (will be deleted after 96 hours and counts towards the storage volume quota), * `delete_permanently` (will be deleted immediately).
Example:
{
"instance_type": "1H100.80S.30V",
"image": "ubuntu-22.04-cuda-12.4-docker",
"ssh_key_ids": [
"13fbab2d-d6b6-4f24-a74c-d3e8716b8b9a"
],
"startup_script_id": "a427f4b0-6919-432f-a75e-b66a20856c66",
"hostname": "my-instance-hostname",
"description": "",
"location_code": "FIN-01",
"os_volume": {
"name": "custom-os-volume-name",
"size": 100,
"on_spot_discontinue": "keep_detached"
},
"is_spot": true,
"coupon": "COUPON-CODE-2026",
"volumes": [
{
"name": "additional-volume-name",
"size": 1000,
"type": "NVMe"
}
],
"existing_volumes": [
"bcbaf4c0-d8b8-482c-8668-bc0e916ec1b1"
],
"contract": "PAY_AS_YOU_GO"
}
Responses
Status: 202 Instance ID
Content-Type: application/json
Perform action on an instance or multiple instances
- Method:
PUT - Path:
/v1/instances - Tags: Instances
Perform an action on a single or multiple instances.
Note: to hibernate an instance, you must first shutdown it. All instance volumes would be detached and the instance will be deleted.
Important: To remove an instance and stop charging your account, you must delete it. Using shutdown will keep charging your account.
When deleting an instance, you can specify which of its' attached volumes will be deleted by providing volume_ids array. Any attached volumes that are not specified in the array would be detached.
Note: If not providing a volume_ids array, only the OS volume will be deleted and the rest detached.
Request Body
Content-Type: application/json
action(required)string, possible values:"boot", "start", "shutdown", "delete", "discontinue", "hibernate", "configure_spot", "force_shutdown", "delete_stuck", "deploy", "transfer"id(required)object— Instance ID or list of instance IDsdelete_permanentlyboolean, default:false— Delete the volumes permanently. Only applicable for delete (or discontinue) action, when volume IDs to delete are also provided.volume_idsarray— Volume IDs to delete. Specify empty array to indicate no volumes should be deleted (previously known as "hibernate")Items:
string
Example:
{
"action": "boot",
"id": [
"9fc4b894-2236-4e04-be83-b35b403c61f9"
],
"volume_ids": [
"99f7e7da-3797-4008-8117-57a114ef1312"
],
"delete_permanently": false
}
Responses
Status: 202 All actions completed successfully
Content-Type: application/json
Array of:
action(required)string, possible values:"boot", "start", "shutdown", "delete", "discontinue", "hibernate", "configure_spot", "force_shutdown", "delete_stuck", "deploy", "transfer"— Action that was requestedinstanceId(required)string, format:uuid— Instance IDstatus(required)string, possible values:"success", "error"— Whether the action succeeded or failederrorstring— Error message if the action failedstatusCodenumber— HTTP status code of the error
Example:
[
{
"instanceId": "",
"action": "boot",
"status": "success",
"error": "",
"statusCode": 400
}
]
Status: 204 Instance is already in the requested state (single action only)
Status: 207 Some actions failed - returns per-action results with individual statuses and errors
Content-Type: application/json
Array of:
action(required)string, possible values:"boot", "start", "shutdown", "delete", "discontinue", "hibernate", "configure_spot", "force_shutdown", "delete_stuck", "deploy", "transfer"— Action that was requestedinstanceId(required)string, format:uuid— Instance IDstatus(required)string, possible values:"success", "error"— Whether the action succeeded or failederrorstring— Error message if the action failedstatusCodenumber— HTTP status code of the error
Example:
[
{
"instanceId": "",
"action": "boot",
"status": "success",
"error": "",
"statusCode": 400
}
]
Status: 400 Invalid request or action not allowed (single action only)
Status: 404 Instance not found (single action only)
Get instance types - deprecated ⚠️ Deprecated
- Method:
GET - Path:
/v1/instances/types - Tags: Instances
Responses
Status: 200
Get instance by id
- Method:
GET - Path:
/v1/instances/{instance_id} - Tags: Instances
Responses
Status: 200 Instance details
Content-Type: application/json
contract(required)string, possible values:"LONG_TERM", "PAY_AS_YOU_GO", "SPOT"cpu(required)objectcreated_at(required)stringdescription(required)stringgpu(required)objectgpu_memory(required)objecthostname(required)stringid(required)stringimage(required)stringinstance_type(required)stringip(required)stringis_spot(required)booleanjupyter_token(required)stringlocation(required)stringmemory(required)objectos_name(required)stringos_volume_id(required)stringprice_per_hour(required)numberpricing(required)string, possible values:"DYNAMIC_PRICE", "FIXED_PRICE"ssh_key_ids(required)arrayItems:
stringstartup_script_id(required)stringstatus(required)string, possible values:"running", "provisioning", "offline", "discontinued", "unknown", "ordered", "notfound", "new", "error", "deleting", "validating", "no_capacity", "installation_failed"storage(required)objectvolume_ids(required)arrayItems:
string
Example:
{
"id": "fb68976d-fd34-4b2d-adbe-c205e8e3d1d3",
"ip": "1.2.3.4",
"status": "running",
"created_at": "2023-07-15T14:10:26.654Z",
"cpu": {
"description": "176 CPU",
"number_of_cores": 176
},
"gpu": {
"description": "8x A100",
"number_of_gpus": 8
},
"gpu_memory": {
"description": "80GB GPU RAM",
"size_in_gigabytes": 80
},
"memory": {
"description": "640GB RAM",
"size_in_gigabytes": 640
},
"storage": {
"description": "dynamic"
},
"hostname": "hazy-star-swims-fin-01",
"description": "ubuntu-22-04-cuda-12-0-docker-fin-01",
"location": "FIN-01",
"price_per_hour": 2.481,
"is_spot": false,
"instance_type": "8A100.176V",
"image": "ubuntu-22-04-cuda-12-0-docker",
"os_name": "Ubuntu 22.04",
"startup_script_id": "95cec4c3-af69-42eb-a790-fcacebfdfcea",
"ssh_key_ids": [
"dd50b622-1c36-48c2-a485-f4d4937a3ea1"
],
"os_volume_id": "95cec4c3-af69-42eb-a790-fcacebfdfcea",
"jupyter_token": "b9e6d8517db3a722ccfb309ca599a35f",
"contract": "PAY_AS_YOU_GO",
"pricing": "FIXED_PRICE",
"volume_ids": [
"95cec4c3-af69-42eb-a790-fcacebfdfcea",
"dd50b622-1c36-48c2-a485-f4d4937a3ea1"
]
}
Check instance type availability - deprecated ⚠️ Deprecated
- Method:
GET - Path:
/v1/instances/availability/{instanceType} - Tags: Instances
Responses
Status: 200
Perform action - deprecated ⚠️ Deprecated
- Method:
POST - Path:
/v1/instances/action - Tags: Instances
Request Body
Content-Type: application/json
action(required)string, possible values:"boot", "start", "shutdown", "delete", "discontinue", "hibernate", "configure_spot", "force_shutdown", "delete_stuck", "deploy", "transfer"id(required)object— Instance ID or list of instance IDsdelete_permanentlyboolean, default:false— Delete the volumes permanently. Only applicable for delete (or discontinue) action, when volume IDs to delete are also provided.volume_idsarray— Volume IDs to delete. Specify empty array to indicate no volumes should be deleted (previously known as "hibernate")Items:
string
Example:
{
"action": "boot",
"id": [
"9fc4b894-2236-4e04-be83-b35b403c61f9"
],
"volume_ids": [
"99f7e7da-3797-4008-8117-57a114ef1312"
],
"delete_permanently": false
}
Responses
Status: 202
Get instance types
- Method:
GET - Path:
/v1/instance-types - Tags: Instance Types
Responses
Status: 200
Content-Type: application/json
Array of:
best_for(required)array— Use cases for instance typeItems:
stringcpu(required)object— CPU detailscurrency(required)string, possible values:"usd", "eur"— Currency typedescription(required)string— Instance type descriptiondisplay_name(required)string— Display namegpu(required)object— GPU detailsgpu_memory(required)object— GPU memory detailsid(required)string— Instance type IDinstance_type(required)string— Instance typemanufacturer(required)string— Manufacturermax_dynamic_price(required)string— Ceiling value for dynamic pricememory(required)object— Memory detailsmodel(required)string— GPU modelname(required)string— GPU model namep2p(required)string— P2P detailsprice_per_hour(required)string— Price per hourspot_price(required)string— Spot price per hourstorage(required)object— Storage detailssupported_os(required)array— Supported OS image typesItems:
stringdeploy_warningstring— Deploy warningdynamic_pricestring— Current dynamic priceserverless_pricestring— Current serverless priceserverless_spot_pricestring— Current serverless spot price
Example:
[
{
"best_for": [
"Giant ML models",
"Multi-GPU training",
"FP64 calculations",
"NVLINK"
],
"cpu": {
"description": "22 CPU",
"number_of_cores": 22
},
"deploy_warning": "Make sure your VM is running on latest Nvidia Driver 525.100+ or newer",
"description": "Dedicated Hardware Instance",
"gpu": {
"description": "1x H100 SXM5 80GB",
"number_of_gpus": 1
},
"gpu_memory": {
"description": "80GB GPU RAM",
"size_in_gigabytes": 80
},
"id": "c01dd00d-0000-4972-ae4e-d429115d055b",
"instance_type": "1H100.80S.22V",
"memory": {
"description": "187GB RAM",
"size_in_gigabytes": 187
},
"model": "H100",
"name": "H100 SXM5 80GB",
"p2p": "600 GB/s",
"price_per_hour": "3.17",
"spot_price": "0.31",
"serverless_price": "1.75",
"serverless_spot_price": "0.87",
"storage": {
"description": "dynamic"
},
"currency": "usd",
"manufacturer": "NVIDIA",
"display_name": "NVIDIA H100 SXM5 80GB",
"supported_os": [
"ubuntu-22.04-cuda-12.3",
"ubuntu-24.04"
]
}
]
Get daily dynamic price history (only the last price update per day) - Not supported anymore ⚠️ Deprecated
- Method:
GET - Path:
/v1/instance-types/price-history - Tags: Instance Types
Responses
Status: 200
Get all instance type availabilities for all locations
- Method:
GET - Path:
/v1/instance-availability - Tags: Instance Availability
Responses
Status: 200 Returns the instance type availabilities for all locations
Content-Type: application/json
Array of:
availabilities(required)array— Array of available instance typesItems:
stringlocation_code(required)string— Location code
Example:
[
{
"location_code": "FIN-01",
"availabilities": [
"1H100.80S.22V",
"2H100.80S.60V",
"4H100.80S.176V",
"8H100.80S.352V"
]
}
]
Get instance type availability
- Method:
GET - Path:
/v1/instance-availability/{instance_type} - Tags: Instance Availability
Responses
Status: 200 Returns the instance type availability
Content-Type: application/json
boolean
Example:
true
Get SSH keys
- Method:
GET - Path:
/v1/sshkeys - Tags: SSH Keys
Responses
Status: 200 Returns a list of the project's SSH keys
Content-Type: application/json
Array of:
id(required)string— SSH key idkey(required)string, format:date-time— Public SSH keyname(required)string— Name of the SSH key
Example:
[
{
"id": "f7b3b3b3-1b3b-4b3b-8b3b-3b3b3b3b3b3b",
"name": "my-key",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD..."
}
]
Add new SSH key
- Method:
POST - Path:
/v1/sshkeys - Tags: SSH Keys
Request Body
Content-Type: application/json
key(required)string— Public SSH keyname(required)string— Name of the SSH key
Example:
{
"name": "my-key",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD..."
}
Responses
Status: 201 Returns the ID of the newly created SSH key
Content-Type: application/json
Delete ssh keys
- Method:
DELETE - Path:
/v1/sshkeys - Tags: SSH Keys
Request Body
Content-Type: application/json
keys(required)string
Example:
{
"keys": [
"ad04a68a-e9a4-43d9-951a-ea1b4ec1ae0e"
]
}
Responses
Status: 200
Get SSH keys
- Method:
GET - Path:
/v1/ssh-keys - Tags: SSH Keys
Responses
Status: 200 Returns a list of the project's SSH keys
Content-Type: application/json
Array of:
id(required)string— SSH key idkey(required)string, format:date-time— Public SSH keyname(required)string— Name of the SSH key
Example:
[
{
"id": "f7b3b3b3-1b3b-4b3b-8b3b-3b3b3b3b3b3b",
"name": "my-key",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD..."
}
]
Add new SSH key
- Method:
POST - Path:
/v1/ssh-keys - Tags: SSH Keys
Request Body
Content-Type: application/json
key(required)string— Public SSH keyname(required)string— Name of the SSH key
Example:
{
"name": "my-key",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD..."
}
Responses
Status: 201 Returns the ID of the newly created SSH key
Content-Type: application/json
Delete ssh keys
- Method:
DELETE - Path:
/v1/ssh-keys - Tags: SSH Keys
Request Body
Content-Type: application/json
keys(required)string
Example:
{
"keys": [
"ad04a68a-e9a4-43d9-951a-ea1b4ec1ae0e"
]
}
Responses
Status: 200
Get single SSH key by ID
- Method:
GET - Path:
/v1/sshkeys/{sshKeyId} - Tags: SSH Keys
Responses
Status: 200 Returns the SSH key
Content-Type: application/json
id(required)string— SSH key idkey(required)string, format:date-time— Public SSH keyname(required)string— Name of the SSH key
Example:
{
"id": "f7b3b3b3-1b3b-4b3b-8b3b-3b3b3b3b3b3b",
"name": "my-key",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD..."
}
Delete single SSH key by ID
- Method:
DELETE - Path:
/v1/sshkeys/{sshKeyId} - Tags: SSH Keys
Responses
Status: 200
Get single SSH key by ID
- Method:
GET - Path:
/v1/ssh-keys/{sshKeyId} - Tags: SSH Keys
Responses
Status: 200 Returns the SSH key
Content-Type: application/json
id(required)string— SSH key idkey(required)string, format:date-time— Public SSH keyname(required)string— Name of the SSH key
Example:
{
"id": "f7b3b3b3-1b3b-4b3b-8b3b-3b3b3b3b3b3b",
"name": "my-key",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD..."
}
Delete single SSH key by ID
- Method:
DELETE - Path:
/v1/ssh-keys/{sshKeyId} - Tags: SSH Keys
Responses
Status: 200
Get startup scripts
- Method:
GET - Path:
/v1/scripts - Tags: Startup Scripts
Responses
Status: 200 Returns a list of the project's startup scripts
Content-Type: application/json
Array of:
id(required)string— Script IDname(required)string— Script namescript(required)string— Script content
Example:
[
{
"id": "8c50b448-5fcd-4023-895b-68267f75078a",
"name": "My startup script",
"script": "#!/bin/bash\n\necho hello world"
}
]
Add new startup script
- Method:
POST - Path:
/v1/scripts - Tags: Startup Scripts
Request Body
Content-Type: application/json
name(required)string— Script namescript(required)string— Script content
Example:
{
"name": "My startup script",
"script": "#!/bin/bash\n\necho hello world"
}
Responses
Status: 201 Returns the ID of the newly created script
Content-Type: application/json
Delete startup scripts
- Method:
DELETE - Path:
/v1/scripts - Tags: Startup Scripts
Request Body
Content-Type: application/json
scripts(required)string
Example:
{
"scripts": [
"daff4e13-a35a-42bc-ab2d-556f5e9c1a25"
]
}
Responses
Status: 200
Get single startup script by ID
- Method:
GET - Path:
/v1/scripts/{scriptId} - Tags: Startup Scripts
Responses
Status: 200 Return startup script with specific ID
Content-Type: application/json
id(required)string— Script IDname(required)string— Script namescript(required)string— Script content
Example:
{
"id": "8c50b448-5fcd-4023-895b-68267f75078a",
"name": "My startup script",
"script": "#!/bin/bash\n\necho hello world"
}
Delete single startup script by ID
- Method:
DELETE - Path:
/v1/scripts/{scriptId} - Tags: Startup Scripts
Responses
Status: 200
Returns a list of available locations
- Method:
GET - Path:
/v1/locations - Tags: Locations
Responses
Status: 200 Returns a list of available locations
Content-Type: application/json
Array of:
code(required)string— Datacenter location codecountry_code(required)string— Country codename(required)string— Location name
Example:
[
{
"code": "FIN-01",
"name": "Finland 1",
"country_code": "FI"
}
]
Get long term periods ⚠️ Deprecated
- Method:
GET - Path:
/v1/long-term/periods - Tags: Long Term
Responses
Status: 200 Returns the long term periods
Content-Type: application/json
Array of:
code(required)string— Long term period codediscount_percentage(required)number— Discount percentageis_enabled(required)boolean— Is long term period enabledname(required)string— Long term period nameunit_name(required)string, possible values:"hour", "day", "week", "month", "year"— Time unit nameunit_value(required)number— Time unit value
Example:
[
{
"code": "3_MONTHS",
"name": "3 months",
"is_enabled": true,
"unit_name": "month",
"unit_value": 3,
"discount_percentage": 14
}
]
Get long term periods for instances
- Method:
GET - Path:
/v1/long-term/periods/instances - Tags: Long Term
Responses
Status: 200 Returns the long term periods for instances
Content-Type: application/json
Array of:
code(required)string— Long term period codediscount_percentage(required)number— Discount percentageis_enabled(required)boolean— Is long term period enabledname(required)string— Long term period nameunit_name(required)string, possible values:"hour", "day", "week", "month", "year"— Time unit nameunit_value(required)number— Time unit value
Example:
[
{
"code": "3_MONTHS",
"name": "3 months",
"is_enabled": true,
"unit_name": "month",
"unit_value": 3,
"discount_percentage": 14
}
]
Get long term periods for clusters
- Method:
GET - Path:
/v1/long-term/periods/clusters - Tags: Long Term
Responses
Status: 200 Returns the long term periods for clusters
Content-Type: application/json
Array of:
code(required)string— Long term period codediscount_percentage(required)number— Discount percentageis_enabled(required)boolean— Is long term period enabledname(required)string— Long term period nameunit_name(required)string, possible values:"hour", "day", "week", "month", "year"— Time unit nameunit_value(required)number— Time unit value
Example:
[
{
"code": "3_MONTHS",
"name": "3 months",
"is_enabled": true,
"unit_name": "month",
"unit_value": 3,
"discount_percentage": 14
}
]
Get container types
- Method:
GET - Path:
/v1/container-types - Tags: Container Types
Responses
Status: 200
Content-Type: application/json
Array of:
cpu(required)object— CPU detailscurrency(required)string, possible values:"usd", "eur"— Currency typegpu(required)object— GPU detailsgpu_memory(required)object— GPU memory detailsid(required)string— Instance type IDinstance_type(required)string— Instance typemanufacturer(required)string— Manufacturermemory(required)object— Memory detailsmodel(required)string— GPU modelname(required)string— GPU model nameserverless_price(required)string— Current serverless priceserverless_spot_price(required)string— Current serverless spot price
Example:
[
{
"id": "60006000-6000-47af-8ff0-600060006004",
"model": "RTX PRO 6000",
"name": "RTX PRO 6000 96GB",
"instance_type": "8RTXPRO6000.224V",
"cpu": {
"description": "224 CPU",
"number_of_cores": 224
},
"gpu": {
"description": "8x RTX PRO 6000 96GB",
"number_of_gpus": 8
},
"gpu_memory": {
"description": "768GB GPU RAM",
"size_in_gigabytes": 768
},
"memory": {
"description": "680GB RAM",
"size_in_gigabytes": 680
},
"serverless_price": "1.529",
"serverless_spot_price": "0.7645",
"currency": "usd",
"manufacturer": "NVIDIA"
}
]
Schemas
GetAccessTokenDto
- Type:
object
client_id(required)stringclient_secret(required)stringgrant_type(required)string, possible values:"client_credentials", "refresh_token"
Example:
{
"grant_type": "client_credentials",
"client_id": "6a51jsgnISg6JOyE7wYZh",
"client_secret": "TvSBFujsqloJb4Jbcezths1OPK9my3zodM3zot9Fn5"
}
RefreshAccessTokenPublicApiDto
- Type:
object
grant_type(required)string, possible values:"client_credentials", "refresh_token"refresh_token(required)string
Example:
{
"grant_type": "refresh_token",
"refresh_token": "OU4O2BwA690cKg2OfGS8pgIfGSTD2vJ..."
}
GetAccessTokenResponseDto
- Type:
object
access_token(required)string— Access token valueexpires_in(required)number— Token expiration time in secondsrefresh_token(required)string— Refresh token valuescope(required)string— Access scopetoken_type(required)string— Token type
Example:
{
"access_token": "eyJhbGciOiJIUzI1NiI...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "OU4O2BwA690cKg2OfGS8pgIfGSTD2vJ...",
"scope": "cloud-api-v1"
}
PublicApiErrorResponseDto
- Type:
object
code(required)string, possible values:"invalid_request", "unauthorized_request", "insufficient_funds", "forbidden_action", "not_found", "conflict", "server_error", "service_unavailable"message(required)string— Error message
Example:
{
"code": "invalid_request",
"message": ""
}
BalanceResponseDto
- Type:
object
amount(required)number— Project balancecurrency(required)string, possible values:"usd", "eur", default:"usd"— Currency type
Example:
{
"amount": 1000,
"currency": "usd"
}
Os
- Type:
object
category(required)string— Image categorydetails(required)array— Image detailsItems:
stringid(required)string— Image idimage_type(required)string— Image typeis_cluster(required)boolean— Is clusteris_default(required)boolean— Is default imagename(required)string— Image name
Example:
{
"id": "342377e1-9f51-4c30-8797-1e12f6ae1d22",
"image_type": "ubuntu-24.04",
"name": "Ubuntu 24.04",
"is_default": false,
"details": [
"Ubuntu 24.04",
"Minimal Image"
],
"category": "ubuntu",
"is_cluster": false
}
GetVolumePublicResponseDto
- Type:
object
base_hourly_cost(required)number— Volume base hourly costcontract(required)string— Volume contract typecreate_directory_command(required)string— Create directory commandcreated_at(required)string— Volume creation datecurrency(required)string, possible values:"usd", "eur"— Volume currencyfilesystem_to_fstab_command(required)string— Filesystem to fstab commandid(required)string— Volume IDinstance_id(required)string— Instance IDinstances(required)array— Instance info the volume is attached toItems:
stringis_os_volume(required)boolean— Is OS volumelocation(required)string— Volume locationlong_term(required)object— Long term contract detailsmonthly_price(required)number— Volume monthly pricemount_command(required)string— Mount commandname(required)string— Volume namepseudo_path(required)string— Volume pseudo path. Unique identifier for your filesystemsize(required)number— Volume size in GBssh_key_ids(required)array— Array of SSH key IDs that are linked to the volume if it is an OS volumeItems:
stringstatus(required)string, possible values:"ordered", "attached", "attaching", "detached", "deleted", "cloning", "detaching", "deleting", "restoring", "created", "exported", "canceled", "canceling"— Volume statustarget(required)string— Volume targettype(required)string, possible values:"HDD", "NVMe", "HDD_Shared", "NVMe_Shared", "NVMe_Local_Storage", "NVMe_Shared_Cluster", "NVMe_OS_Cluster"— Volume type
Example:
{
"id": "9609bc1b-e199-4820-8ab8-fdcfe9a4fd65",
"instance_id": "19edab71-4fe5-4e29-ae7c-5c4d0776aad1",
"instances": [
{
"id": "19edab71-4fe5-4e29-ae7c-5c4d0776aad1",
"auto_rental_extension": null,
"ip": "123.123.123.123",
"instance_type": "4A100.88V",
"status": "running",
"os_volume_id": "25daef82-f821-4a43-82a5-1e15c7e701b5",
"hostname": "hazy-star-swims-fin-01"
}
],
"name": "OS-NVMe-84Ca37Jf",
"created_at": "2024-07-08T19:19:54.247Z",
"status": "attached",
"size": 100,
"is_os_volume": true,
"target": "vda",
"type": "NVMe",
"location": "FIN-01",
"ssh_key_ids": [
"84a57808-bc31-4007-b1ee-4797dc606d97"
],
"pseudo_path": "volume-84Ca37Jf",
"create_directory_command": "mkdir -p /mnt/volume",
"mount_command": "mount -t nfs -o nconnect=16 nfs.fin-01.datacrunch.io:volume-88eb67d0 /mnt/volume",
"filesystem_to_fstab_command": "grep -qxF 'nfs.fin-01.datacrunch.io:volume-88eb67d0 /mnt/volume nfs defaults 0 0' /etc/fstab || echo 'nfs.fin-01.datacrunch.io:volume-88eb67d0 /mnt/volume nfs defaults 0 0' | sudo tee -a /etc/fstab",
"contract": "LONG_TERM",
"base_hourly_cost": 0.0273972602739726,
"monthly_price": 20,
"currency": "eur",
"long_term": {
"end_date": "2025-01-08T19:34:16.663Z",
"long_term_period": "3 months",
"discount_percentage": 14,
"auto_rental_extension": false,
"next_period_price": 49.93356,
"current_period_price": 49.93356
}
}
GetVolumeInTrashPublicResponseDto
- Type:
object
base_hourly_cost(required)number— Volume base hourly costcontract(required)string— Volume contract typecreated_at(required)string— Volume creation datecurrency(required)string, possible values:"usd", "eur"— Volume currencydeleted_at(required)string— Volume deletion dateid(required)string— Volume IDinstance_id(required)string— Instance IDinstances(required)array— Instance info the volume is attached toItems:
stringis_os_volume(required)boolean— Is OS volumeis_permanently_deleted(required)boolean— Is volume permanently deletedlocation(required)string— Volume locationmonthly_price(required)number— Volume monthly pricename(required)string— Volume namesize(required)number— Volume size in GBssh_key_ids(required)array— Array of SSH key IDs that are linked to the volume if it is an OS volumeItems:
stringstatus(required)string, possible values:"ordered", "attached", "attaching", "detached", "deleted", "cloning", "detaching", "deleting", "restoring", "created", "exported", "canceled", "canceling"— Volume statustarget(required)string— Volume targettype(required)string, possible values:"HDD", "NVMe", "HDD_Shared", "NVMe_Shared", "NVMe_Local_Storage", "NVMe_Shared_Cluster", "NVMe_OS_Cluster"— Volume type
Example:
{
"id": "9609bc1b-e199-4820-8ab8-fdcfe9a4fd65",
"instance_id": "19edab71-4fe5-4e29-ae7c-5c4d0776aad1",
"instances": [
{
"id": "19edab71-4fe5-4e29-ae7c-5c4d0776aad1",
"auto_rental_extension": null,
"ip": "123.123.123.123",
"instance_type": "4A100.88V",
"status": "running",
"os_volume_id": "25daef82-f821-4a43-82a5-1e15c7e701b5",
"hostname": "hazy-star-swims-fin-01"
}
],
"name": "OS-NVMe-84Ca37Jf",
"created_at": "2024-07-08T19:19:54.247Z",
"status": "attached",
"size": 100,
"is_os_volume": true,
"target": "vda",
"type": "NVMe",
"location": "FIN-01",
"ssh_key_ids": [
"84a57808-bc31-4007-b1ee-4797dc606d97"
],
"contract": "LONG_TERM",
"base_hourly_cost": 0.0273972602739726,
"monthly_price": 20,
"currency": "eur",
"deleted_at": "2025-01-10T11:35:47.633Z",
"is_permanently_deleted": false
}
CreateVolumePublicDto
- Type:
object
location_code(required)string— Location codename(required)string— Volume namesize(required)number— Volume size in GBtype(required)string, possible values:"HDD", "NVMe", "HDD_Shared", "NVMe_Shared", "NVMe_Local_Storage", "NVMe_Shared_Cluster", "NVMe_OS_Cluster"— Volume typeinstance_idstring— Instance ID to attach the volume toinstance_idsarray— Array of instance IDs to attach the volume toItems:
string
Example:
{
"type": "NVMe",
"location_code": "FIN-01",
"size": 50,
"instance_id": "13c706c8-7929-4a07-a359-cbe67ee98c0b",
"instance_ids": [
"7af2aabf-1feb-48a3-a4fd-aba8a7cd1712",
"57efe6eb-fa6c-4f9d-8bc2-90fdb434161a"
],
"name": "my-volume"
}
PerformVolumeActionPublicDto
- Type:
object
action(required)string, possible values:"attach", "detach", "delete", "rename", "resize", "restore", "clone", "cancel", "create", "export", "transfer"— Action to perform on the volume(s) The `clone` action returns its destination volume ID: `{"id":"..."}`. Send a `cancel` action with that same ID to interrupt a cross-datacenter clone.id(required)object— Volume ID(s) to perform the action on. Single volume id or an array of volume idsinstance_idstring— Instance ID to attach the volume to, if the action is attachinstance_idsarray— Array of instance IDs to attach the volume to, if the action is attachItems:
stringis_permanentboolean— If deleting volume(s), delete them permanentlylocation_codestring— Target location code if cloning the volumenamestring— New volume namesizenumber— New volume size in GB. Can't be lower than current sizetypestring— Target volume type
Example:
{
"action": "detach",
"id": [
"5a10bb0c-dd09-4e7f-b7f4-81d315111077"
],
"size": 100,
"instance_id": "981b5828-64d9-40d8-9e81-12959c7839f5",
"instance_ids": [
"b367e426-99e2-4ad1-a633-4fa81912c4c8",
"4435a7f3-8421-4ae1-a6b1-a2c4906cd646"
],
"name": "volume-name",
"type": "NVMe",
"is_permanent": true,
"location_code": "FIN-01"
}
DeleteVolumePublicDto
- Type:
object
is_permanentboolean, default:false— If true, the volume will be removed permanently
Example:
{
"is_permanent": false
}
VolumeType
- Type:
object
burst_bandwidth(required)number— Burst bandwidthcontinuous_bandwidth(required)number— Continuous bandwidthinternal_network_speed(required)number— Internal network speediops(required)string— IOPSis_shared_fs(required)boolean— Is shared file systemprice(required)object— Price detailsthroughput_gbps(required)number— Throughput in GB/stype(required)string, possible values:"HDD", "NVMe", "HDD_Shared", "NVMe_Shared", "NVMe_Local_Storage", "NVMe_Shared_Cluster", "NVMe_OS_Cluster"— Volume type
Example:
{
"type": "NVMe",
"price": {
"price_per_month_per_gb": 0.2,
"cps_per_gb": 7.6103500761035e-8,
"currency": "usd"
},
"is_shared_fs": false,
"burst_bandwidth": 2500,
"continuous_bandwidth": 2000,
"internal_network_speed": 50,
"iops": "100k",
"throughput_gbps": 4
}
GetInstanceResponsePublicApiDto
- Type:
object
contract(required)string, possible values:"LONG_TERM", "PAY_AS_YOU_GO", "SPOT"cpu(required)objectcreated_at(required)stringdescription(required)stringgpu(required)objectgpu_memory(required)objecthostname(required)stringid(required)stringimage(required)stringinstance_type(required)stringip(required)stringis_spot(required)booleanjupyter_token(required)stringlocation(required)stringmemory(required)objectos_name(required)stringos_volume_id(required)stringprice_per_hour(required)numberpricing(required)string, possible values:"DYNAMIC_PRICE", "FIXED_PRICE"ssh_key_ids(required)arrayItems:
stringstartup_script_id(required)stringstatus(required)string, possible values:"running", "provisioning", "offline", "discontinued", "unknown", "ordered", "notfound", "new", "error", "deleting", "validating", "no_capacity", "installation_failed"storage(required)objectvolume_ids(required)arrayItems:
string
Example:
{
"id": "fb68976d-fd34-4b2d-adbe-c205e8e3d1d3",
"ip": "1.2.3.4",
"status": "running",
"created_at": "2023-07-15T14:10:26.654Z",
"cpu": {
"description": "176 CPU",
"number_of_cores": 176
},
"gpu": {
"description": "8x A100",
"number_of_gpus": 8
},
"gpu_memory": {
"description": "80GB GPU RAM",
"size_in_gigabytes": 80
},
"memory": {
"description": "640GB RAM",
"size_in_gigabytes": 640
},
"storage": {
"description": "dynamic"
},
"hostname": "hazy-star-swims-fin-01",
"description": "ubuntu-22-04-cuda-12-0-docker-fin-01",
"location": "FIN-01",
"price_per_hour": 2.481,
"is_spot": false,
"instance_type": "8A100.176V",
"image": "ubuntu-22-04-cuda-12-0-docker",
"os_name": "Ubuntu 22.04",
"startup_script_id": "95cec4c3-af69-42eb-a790-fcacebfdfcea",
"ssh_key_ids": [
"dd50b622-1c36-48c2-a485-f4d4937a3ea1"
],
"os_volume_id": "95cec4c3-af69-42eb-a790-fcacebfdfcea",
"jupyter_token": "b9e6d8517db3a722ccfb309ca599a35f",
"contract": "PAY_AS_YOU_GO",
"pricing": "FIXED_PRICE",
"volume_ids": [
"95cec4c3-af69-42eb-a790-fcacebfdfcea",
"dd50b622-1c36-48c2-a485-f4d4937a3ea1"
]
}
OsVolumeDto
- Type:
object
name(required)stringsize(required)numberon_spot_discontinuestring, possible values:"keep_detached", "move_to_trash", "delete_permanently"— Optional, by default, nothing is deleted. Should we automatically delete, if instance is deleted because of spot? Allowed values: * `keep_detached` (default behavior, volume will be detached), * `move_to_trash` (will be deleted after 96 hours and counts towards the storage volume quota), * `delete_permanently` (will be deleted immediately).
Example:
{
"name": "custom-os-volume-name",
"size": "100",
"on_spot_discontinue": "keep_detached"
}
VolumeDto
- Type:
object
name(required)stringsize(required)numbertype(required)string, possible values:"HDD", "NVMe", "HDD_Shared", "NVMe_Shared", "NVMe_Local_Storage", "NVMe_Shared_Cluster", "NVMe_OS_Cluster"on_spot_discontinuestring, possible values:"keep_detached", "move_to_trash", "delete_permanently"— Optional, by default, nothing is deleted. Should we automatically delete, if instance is deleted because of spot? Allowed values: * `keep_detached` (default behavior, volume will be detached), * `move_to_trash` (will be deleted after 96 hours and counts towards the storage volume quota), * `delete_permanently` (will be deleted immediately).
Example:
{
"name": "custom-os-volume-name",
"size": "100",
"on_spot_discontinue": "keep_detached",
"type": "HDD"
}
DeployInstancePublicDto
- Type:
object
description(required)stringhostname(required)stringimage(required)string— OS image specification for the created instance. There are two options: 1. OS image type. For a list of supported images, check `GET /images` endpoint, `"image_type"` property. To set the name and size, use `"os_volume"` property. 2. Previously customized OS volume ID. (To create an OS volume, first make an instance with existing `"image"` type. To customize the volume content, ssh into that instance. Finally, delete the instance but keep the volume.)instance_type(required)stringlocation_code(required)string— Location code for the instance and any newly created volumescontractstring, possible values:"LONG_TERM", "PAY_AS_YOU_GO", "SPOT"couponstringexisting_volumesarray— IDs of additional existing detached volumes to attach to this new instance when its created. (To configure instance **OS** volume, use `"image"` and `"os_volume"` properties.)Items:
stringis_spotboolean— Create a spot instance. Spot instances may be evicted by Verda at any time without warning.os_volumeobject— Newly created OS volume name and size (in GB). Use when `"image"` property is an OS image type. Object properties: * `name` - Name of the OS volume * `size` - Size of the OS volume in GB * `on_spot_discontinue` - Removal policy for the OS volume for spot instances. Optional, by default, nothing is deleted. Allowed values: `keep_detached` (default behavior), `move_to_trash` (will be deleted after 96 hours and counts towards the storage volume quota), `delete_permanently` (will be deleted immediately).pricingstring, possible values:"DYNAMIC_PRICE", "FIXED_PRICE"— This field is deprecated as DYNAMIC_PRICE is removed. Only FIXED_PRICE is supported now.ssh_key_idsobjectstartup_script_idstringvolumesarray— Additional (**non-OS**) volumes to create and attach to this new instance. (To configure **OS** volume, use `"image"` and `"os_volume"` properties.)Items:
name(required)stringsize(required)numbertype(required)string, possible values:"HDD", "NVMe", "HDD_Shared", "NVMe_Shared", "NVMe_Local_Storage", "NVMe_Shared_Cluster", "NVMe_OS_Cluster"on_spot_discontinuestring, possible values:"keep_detached", "move_to_trash", "delete_permanently"— Optional, by default, nothing is deleted. Should we automatically delete, if instance is deleted because of spot? Allowed values: * `keep_detached` (default behavior, volume will be detached), * `move_to_trash` (will be deleted after 96 hours and counts towards the storage volume quota), * `delete_permanently` (will be deleted immediately).
Example:
{
"instance_type": "1H100.80S.30V",
"image": "ubuntu-22.04-cuda-12.4-docker",
"ssh_key_ids": [
"13fbab2d-d6b6-4f24-a74c-d3e8716b8b9a"
],
"startup_script_id": "a427f4b0-6919-432f-a75e-b66a20856c66",
"hostname": "my-instance-hostname",
"description": "",
"location_code": "FIN-01",
"os_volume": {
"name": "custom-os-volume-name",
"size": 100,
"on_spot_discontinue": "keep_detached"
},
"is_spot": true,
"coupon": "COUPON-CODE-2026",
"volumes": [
{
"name": "additional-volume-name",
"size": 1000,
"type": "NVMe"
}
],
"existing_volumes": [
"bcbaf4c0-d8b8-482c-8668-bc0e916ec1b1"
],
"contract": "PAY_AS_YOU_GO"
}
PerformInstanceActionPublicDto
- Type:
object
action(required)string, possible values:"boot", "start", "shutdown", "delete", "discontinue", "hibernate", "configure_spot", "force_shutdown", "delete_stuck", "deploy", "transfer"id(required)object— Instance ID or list of instance IDsdelete_permanentlyboolean, default:false— Delete the volumes permanently. Only applicable for delete (or discontinue) action, when volume IDs to delete are also provided.volume_idsarray— Volume IDs to delete. Specify empty array to indicate no volumes should be deleted (previously known as "hibernate")Items:
string
Example:
{
"action": "boot",
"id": [
"9fc4b894-2236-4e04-be83-b35b403c61f9"
],
"volume_ids": [
"99f7e7da-3797-4008-8117-57a114ef1312"
],
"delete_permanently": false
}
InstanceActionResultDto
- Type:
object
action(required)string, possible values:"boot", "start", "shutdown", "delete", "discontinue", "hibernate", "configure_spot", "force_shutdown", "delete_stuck", "deploy", "transfer"— Action that was requestedinstanceId(required)string, format:uuid— Instance IDstatus(required)string, possible values:"success", "error"— Whether the action succeeded or failederrorstring— Error message if the action failedstatusCodenumber— HTTP status code of the error
Example:
{
"instanceId": "",
"action": "boot",
"status": "success",
"error": "",
"statusCode": 400
}
GetClusterResponsePublicApiDto
- Type:
object
cluster_type(required)stringcontract(required)string, possible values:"LONG_TERM", "PAY_AS_YOU_GO"— Contract type used for this clustercpu(required)objectcreated_at(required)stringdescription(required)stringgpu(required)objectgpu_memory(required)objecthostname(required)stringid(required)stringimage(required)string— OS image used to deploy the cluster nodesip(required)string— Jump host IP addresslocation(required)stringmemory(required)objectos_name(required)stringprice_per_hour(required)numberssh_key_ids(required)array— SSH key IDs used to access the cluster jump hostItems:
stringstatus(required)string, possible values:"running", "provisioning", "offline", "discontinued", "unknown", "ordered", "notfound", "new", "error", "deleting", "validating", "no_capacity", "installation_failed"auto_rental_extensionboolean— Deprecated: use extension_settings instead.extension_settingsstring, possible values:"auto_renew", "pay_as_you_go", "end_contract"— Extension settings for long-term contractslong_term_periodstring— Long-term rental period for this cluster, e.g. 1 week etc.shared_volumesarray— Shared volumes attached to this cluster. There is always one shared volume mounted as /home.Items:
stringstartup_script_idstringturn_to_pay_as_you_goboolean— Deprecated: use extension_settings instead.worker_nodesarray— Worker nodes of this cluster. You can access them from the jump host by executing `ssh <hostname>`Items:
string
Example:
{
"id": "a162b28d-aa97-4b79-9032-daa8be16fa2d",
"ip": "1.2.3.4",
"status": "running",
"created_at": "2023-07-15T14:10:26.654Z",
"cpu": {
"description": "176 CPU",
"number_of_cores": 176
},
"gpu": {
"description": "8x A100",
"number_of_gpus": 8
},
"gpu_memory": {
"description": "80GB GPU RAM",
"size_in_gigabytes": 80
},
"memory": {
"description": "640GB RAM",
"size_in_gigabytes": 640
},
"hostname": "hazy-star-swims-fin-01",
"description": "ubuntu-22-04-cuda-12-0-docker-fin-01",
"location": "FIN-01",
"price_per_hour": 2.481,
"cluster_type": "16H200",
"image": "ubuntu-22-04-cuda-12-0-docker",
"os_name": "Ubuntu 22.04",
"startup_script_id": "95cec4c3-af69-42eb-a790-fcacebfdfcea",
"ssh_key_ids": [
"dd50b622-1c36-48c2-a485-f4d4937a3ea1"
],
"contract": "LONG_TERM",
"extension_settings": "auto_renew",
"long_term_period": "1 week",
"worker_nodes": [
{
"id": "1",
"hostname": "worker-1",
"public_ip": "1.2.3.4",
"private_ip": "1.2.3.4",
"status": "running"
}
],
"shared_volumes": [
{
"id": "1",
"name": "shared-volume-1",
"mount_point": "/home",
"size_in_gigabytes": 100
}
]
}
SharedVolumeDto
- Type:
object
name(required)string— Name of the shared cluster volumesize(required)number— Size of the shared cluster volume in GB
Example:
{
"name": "SFS-pmAna3o2",
"size": 30000
}
ExistingSharedVolumeDto
- Type:
object
id(required)string— Existing shared volume ID
Example:
{
"id": "45b75ffe-4749-4983-96af-ad0f4e210404"
}
DeployClusterPublicDto
- Type:
object
cluster_type(required)string— Cluster instance type. Can be listed using the `GET /v1/cluster-types` endpoint.description(required)stringhostname(required)stringimage(required)string— OS image specification for the cluster. For a list of supported images, check `GET /v1/images/cluster` endpoint, `"image_type"` property.location_code(required)string— Location code for the cluster and its shared volumeshared_volume(required)object— Shared cluster volume (SFS) specification. Clusters have one shared volume mounted as /home. The OS volume is ephemeral and created automatically by the system.auto_rental_extensionboolean— Deprecated: use extension_settings instead. Enable automatic rental extension for long-term contracts.contractstring, possible values:"PAY_AS_YOU_GO", "LONG_TERM"— Contract type. For clusters, only PAY_AS_YOU_GO currently supported.existing_volumesarray— Existing shared volumes to attach to the cluster. Should be in the same location as the cluster. Must be previously created and attached to the cluster.Items:
id(required)string— Existing shared volume ID
extension_settingsstring, possible values:"auto_renew", "pay_as_you_go", "end_contract"— Extension settings for long-term contracts. Takes priority over auto_rental_extension and turn_to_pay_as_you_go.ssh_key_idsobject— SSH key IDs to attach to the cluster. Required if image is an OS image type.startup_script_idstring— Startup script ID to run on cluster initializationturn_to_pay_as_you_goboolean— Deprecated: use extension_settings instead. Automatically convert to pay-as-you-go after the long-term period ends.
Example:
{
"cluster_type": "16H200",
"image": "ubuntu-22.04-cuda-12.4-cluster",
"ssh_key_ids": [
"0c16977d-da28-49fe-b99b-80b497a67036"
],
"startup_script_id": "6c6bf6d5-7e52-4b33-9234-daefcdbbd3ce",
"hostname": "dark-vm-shrinks-fin-01",
"description": "ubuntu-22-04-cuda-12-4-16b200-fin-01",
"location_code": "FIN-01",
"contract": "PAY_AS_YOU_GO",
"extension_settings": "auto_renew",
"shared_volume": {
"name": "cluster-volume-name",
"size": 30000
},
"existing_volumes": []
}
DeployClusterResponsePublicApiDto
- Type:
object
id(required)string
Example:
{
"id": "d56cd96b-1b4f-4740-b21f-ccf351668f88"
}
PerformClusterActionPublicDto
- Type:
object
action(required)string, possible values:"discontinue"id(required)string— Cluster ID
Example:
{
"action": "discontinue",
"id": "03db8c85-9fe7-432c-b1ec-165e028ce3ef"
}
PerformClusterActionsBulkDto
- Type:
object
actions(required)array— Array of cluster actions, one per each clusterItems:
action(required)string, possible values:"discontinue"id(required)string— Cluster ID
Example:
{
"actions": [
{
"action": "discontinue",
"id": "ba765ab4-db65-4114-8283-ef91de2f4aa1"
},
{
"action": "discontinue",
"id": "2df6567e-5364-408e-a6b4-5dc195e151d0"
}
]
}
InstanceType
- Type:
object
best_for(required)array— Use cases for instance typeItems:
stringcpu(required)object— CPU detailscurrency(required)string, possible values:"usd", "eur"— Currency typedescription(required)string— Instance type descriptiondisplay_name(required)string— Display namegpu(required)object— GPU detailsgpu_memory(required)object— GPU memory detailsid(required)string— Instance type IDinstance_type(required)string— Instance typemanufacturer(required)string— Manufacturermax_dynamic_price(required)string— Ceiling value for dynamic pricememory(required)object— Memory detailsmodel(required)string— GPU modelname(required)string— GPU model namep2p(required)string— P2P detailsprice_per_hour(required)string— Price per hourspot_price(required)string— Spot price per hourstorage(required)object— Storage detailssupported_os(required)array— Supported OS image typesItems:
stringdeploy_warningstring— Deploy warningdynamic_pricestring— Current dynamic priceserverless_pricestring— Current serverless priceserverless_spot_pricestring— Current serverless spot price
Example:
{
"best_for": [
"Giant ML models",
"Multi-GPU training",
"FP64 calculations",
"NVLINK"
],
"cpu": {
"description": "22 CPU",
"number_of_cores": 22
},
"deploy_warning": "Make sure your VM is running on latest Nvidia Driver 525.100+ or newer",
"description": "Dedicated Hardware Instance",
"gpu": {
"description": "1x H100 SXM5 80GB",
"number_of_gpus": 1
},
"gpu_memory": {
"description": "80GB GPU RAM",
"size_in_gigabytes": 80
},
"id": "c01dd00d-0000-4972-ae4e-d429115d055b",
"instance_type": "1H100.80S.22V",
"memory": {
"description": "187GB RAM",
"size_in_gigabytes": 187
},
"model": "H100",
"name": "H100 SXM5 80GB",
"p2p": "600 GB/s",
"price_per_hour": "3.17",
"spot_price": "0.31",
"serverless_price": "1.75",
"serverless_spot_price": "0.87",
"storage": {
"description": "dynamic"
},
"currency": "usd",
"manufacturer": "NVIDIA",
"display_name": "NVIDIA H100 SXM5 80GB",
"supported_os": [
"ubuntu-22.04-cuda-12.3",
"ubuntu-24.04"
]
}
InstanceAvailabilityResponseDto
- Type:
object
availabilities(required)array— Array of available instance typesItems:
stringlocation_code(required)string— Location code
Example:
{
"location_code": "FIN-01",
"availabilities": [
"1H100.80S.22V",
"2H100.80S.60V",
"4H100.80S.176V",
"8H100.80S.352V"
]
}
ClusterAvailabilityResponseDto
- Type:
object
availabilities(required)array— Array of available cluster typesItems:
stringlocation_code(required)string— Location code
Example:
{
"location_code": "FIN-01",
"availabilities": [
"16H200",
"32H200"
]
}
GetKeysResponseDto
- Type:
object
id(required)string— SSH key idkey(required)string, format:date-time— Public SSH keyname(required)string— Name of the SSH key
Example:
{
"id": "f7b3b3b3-1b3b-4b3b-8b3b-3b3b3b3b3b3b",
"name": "my-key",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD..."
}
AddKeyDto
- Type:
object
key(required)string— Public SSH keyname(required)string— Name of the SSH key
Example:
{
"name": "my-key",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD..."
}
DeleteKeysPublicDto
- Type:
object
keys(required)string
Example:
{
"keys": [
"ad04a68a-e9a4-43d9-951a-ea1b4ec1ae0e"
]
}
GetScriptResponseDto
- Type:
object
id(required)string— Script IDname(required)string— Script namescript(required)string— Script content
Example:
{
"id": "8c50b448-5fcd-4023-895b-68267f75078a",
"name": "My startup script",
"script": "#!/bin/bash\n\necho hello world"
}
AddScriptDto
- Type:
object
name(required)string— Script namescript(required)string— Script content
Example:
{
"name": "My startup script",
"script": "#!/bin/bash\n\necho hello world"
}
DeleteScriptsDto
- Type:
object
scripts(required)string
Example:
{
"scripts": [
"daff4e13-a35a-42bc-ab2d-556f5e9c1a25"
]
}
Location
- Type:
object
code(required)string— Datacenter location codecountry_code(required)string— Country codename(required)string— Location name
Example:
{
"code": "FIN-01",
"name": "Finland 1",
"country_code": "FI"
}
LongTermPeriodResponseDto
- Type:
object
code(required)string— Long term period codediscount_percentage(required)number— Discount percentageis_enabled(required)boolean— Is long term period enabledname(required)string— Long term period nameunit_name(required)string, possible values:"hour", "day", "week", "month", "year"— Time unit nameunit_value(required)number— Time unit value
Example:
{
"code": "3_MONTHS",
"name": "3 months",
"is_enabled": true,
"unit_name": "month",
"unit_value": 3,
"discount_percentage": 14
}
ClusterType
- Type:
object
cluster_type(required)string— Instance typecpu(required)object— CPU detailscurrency(required)string, possible values:"usd", "eur"— Currency typegpu(required)object— GPU detailsgpu_memory(required)object— GPU memory detailsid(required)string— Instance type IDmanufacturer(required)string— Manufacturermemory(required)object— Memory detailsmodel(required)string— GPU modelname(required)string— GPU model namenode_details(required)array— Node detailsItems:
stringprice_per_hour(required)string— Price per hoursupported_os(required)array— Supported OS image typesItems:
string
Example:
{
"id": "c01dd00d-0000-4972-ae4e-d429115d055b",
"model": "B200 Cluster",
"name": "H100 SXM5 80GB",
"cluster_type": "16H200",
"cpu": {
"description": "22 CPU",
"number_of_cores": 22
},
"gpu": {
"description": "1x H100 SXM5 80GB",
"number_of_gpus": 1
},
"gpu_memory": {
"description": "80GB GPU RAM",
"size_in_gigabytes": 80
},
"memory": {
"description": "187GB RAM",
"size_in_gigabytes": 187
},
"price_per_hour": "3.17",
"currency": "usd",
"manufacturer": "NVIDIA",
"node_details": [
{
"GPU VRAM": "1536 GB"
},
{
"AMD Turin CPU": "128 cores"
},
{
"InfiniBand": "3200 Gbit/s"
},
{
"Ethernet": "100 Gbit/s"
},
{
"Uplink": "5 Gbit/s"
}
],
"supported_os": [
"ubuntu-22.04-cuda-12.3",
"ubuntu-24.04"
]
}
ContainerType
- Type:
object
cpu(required)object— CPU detailscurrency(required)string, possible values:"usd", "eur"— Currency typegpu(required)object— GPU detailsgpu_memory(required)object— GPU memory detailsid(required)string— Instance type IDinstance_type(required)string— Instance typemanufacturer(required)string— Manufacturermemory(required)object— Memory detailsmodel(required)string— GPU modelname(required)string— GPU model nameserverless_price(required)string— Current serverless priceserverless_spot_price(required)string— Current serverless spot price
Example:
{
"id": "60006000-6000-47af-8ff0-600060006004",
"model": "RTX PRO 6000",
"name": "RTX PRO 6000 96GB",
"instance_type": "8RTXPRO6000.224V",
"cpu": {
"description": "224 CPU",
"number_of_cores": 224
},
"gpu": {
"description": "8x RTX PRO 6000 96GB",
"number_of_gpus": 8
},
"gpu_memory": {
"description": "768GB GPU RAM",
"size_in_gigabytes": 768
},
"memory": {
"description": "680GB RAM",
"size_in_gigabytes": 680
},
"serverless_price": "1.529",
"serverless_spot_price": "0.7645",
"currency": "usd",
"manufacturer": "NVIDIA"
}