API
Here are our current API endpoints for our Voltage Park On Demand API.
Overview
Our Voltage Park On Demand API allows developers to deploy, manage, and monitor virtual machines (VMs) and bare metal instances.
Authentication
This API uses Bearer Token Authentication to authorize requests. Every request must include a valid API token in the Authorization header.
Example:
Authorization: Bearer YOUR_API_KEY
How to Obtain an API Key
Contact our support team by emailing [email protected].
Provide the following details in your request:
The email address associated with your Voltage Park On Demand account.
Your Organization ID, which can be located on your Account page.
Our team will acknowledge your request and provide an API Key with the proper permissions.
Keep your API key secure! Treat it like a password and NEVER expose it in public repositories.
Endpoints
3
0
GET /api/v1/locations/ HTTP/1.1
Host:
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"results": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"city": "text",
"region": "text",
"country": "text",
"hostnodes": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"location_id": "123e4567-e89b-12d3-a456-426614174000",
"available_resources": {
"gpus": {
"h100-sxm5-80gb": {
"count": 8
}
},
"ram_gb": 960,
"storage_gb": 14000,
"vcpu_count": 208
},
"pricing": {
"per_gpu_hr": {
"h100-sxm5-80gb": "3.500000"
},
"per_vcpu_hr": "0.000030",
"per_gb_ram_hr": "0.000001",
"per_gb_storage_hr": "0.000001"
},
"available_ports": [
1
]
}
]
}
],
"total_result_count": 1,
"has_previous": true,
"has_next": true
}
GET /api/v1/locations/{location_id} HTTP/1.1
Host:
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"city": "text",
"region": "text",
"country": "text",
"hostnodes": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"location_id": "123e4567-e89b-12d3-a456-426614174000",
"available_resources": {
"gpus": {
"h100-sxm5-80gb": {
"count": 8
}
},
"ram_gb": 960,
"storage_gb": 14000,
"vcpu_count": 208
},
"pricing": {
"per_gpu_hr": {
"h100-sxm5-80gb": "3.500000"
},
"per_vcpu_hr": "0.000030",
"per_gb_ram_hr": "0.000001",
"per_gb_storage_hr": "0.000001"
},
"available_ports": [
1
]
}
]
}
GET /api/v1/hostnodes/{hostnode_id} HTTP/1.1
Host:
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"location_id": "123e4567-e89b-12d3-a456-426614174000",
"available_resources": {
"gpus": {
"h100-sxm5-80gb": {
"count": 8
}
},
"ram_gb": 960,
"storage_gb": 14000,
"vcpu_count": 208
},
"pricing": {
"per_gpu_hr": {
"h100-sxm5-80gb": "3.500000"
},
"per_vcpu_hr": "0.000030",
"per_gb_ram_hr": "0.000001",
"per_gb_storage_hr": "0.000001"
},
"available_ports": [
1
]
}
Convert a instant vm so it may be used by a customer. Run custom cloud init scripts if provided. This route requires an authorization check.
My Instant Virtual Machine
super_secret_instant_vm_password
Configuration for organization-associated SSH keys. Can select all, none, or select keys by ID.
{"mode":"none"}
[[]]
Example: ["ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDAKOgHv82A6Oi7AWLvBC9N..."]
[]
Example: ["tag1","tag2"]
POST /api/v1/virtual-machines/instant HTTP/1.1
Host:
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 492
{
"config_id": "123e4567-e89b-12d3-a456-426614174000",
"name": "My Instant Virtual Machine",
"password": "super_secret_instant_vm_password",
"organization_ssh_keys": {
"mode": "selective",
"ssh_key_ids": [
"123e4567-e89b-12d3-a456-426614174000"
]
},
"ssh_keys": [
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDAKOgHv82A6Oi7AWLvBC9N..."
],
"cloud_init": {
"packages": [
"text"
],
"write_files": [
{
"encoding": "text",
"content": "text",
"owner": "text",
"path": "text",
"permissions": "text"
}
],
"runcmd": [
"text"
]
},
"tags": [
"tag1",
"tag2"
]
}
{
"vm_id": "123e4567-e89b-12d3-a456-426614174000"
}
10
0
GET /api/v1/virtual-machines/ HTTP/1.1
Host:
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"results": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"hostnode_id": "123e4567-e89b-12d3-a456-426614174000",
"type": "ondem",
"status": "Running",
"name": "text",
"resources": {
"gpus": {
"h100-sxm5-80gb": {
"count": 1
}
},
"vcpu_count": 4,
"ram_gb": 16,
"storage_gb": 40
},
"operating_system": "Ubuntu 20.04 LTS",
"pricing": {
"gpus_per_hr": "text",
"vcpus_per_hr": "text",
"ram_per_hr": "text",
"storage_per_hr": "text",
"total_associated_per_hr": "text",
"total_disassociated_per_hr": "text"
},
"public_ip": "text",
"port_forwards": [
{
"internal_port": 22,
"external_port": 20040
}
],
"timestamp_creation": "2025-06-27T11:56:31.995Z",
"tags": [
"text"
]
}
],
"total_result_count": 1,
"has_previous": true,
"has_next": true
}
GET /api/v1/virtual-machines/{virtual_machine_id} HTTP/1.1
Host:
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"hostnode_id": "123e4567-e89b-12d3-a456-426614174000",
"type": "ondem",
"status": "Running",
"name": "text",
"resources": {
"gpus": {
"h100-sxm5-80gb": {
"count": 1
}
},
"vcpu_count": 4,
"ram_gb": 16,
"storage_gb": 40
},
"operating_system": "Ubuntu 20.04 LTS",
"pricing": {
"gpus_per_hr": "text",
"vcpus_per_hr": "text",
"ram_per_hr": "text",
"storage_per_hr": "text",
"total_associated_per_hr": "text",
"total_disassociated_per_hr": "text"
},
"public_ip": "text",
"port_forwards": [
{
"internal_port": 22,
"external_port": 20040
}
],
"timestamp_creation": "2025-06-27T11:56:31.995Z",
"tags": [
"text"
]
}
PATCH /api/v1/virtual-machines/{virtual_machine_id} HTTP/1.1
Host:
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 31
{
"name": "text",
"tags": [
"text"
]
}
{
"name": "text",
"tags": [
"text"
]
}
DELETE /api/v1/virtual-machines/{virtual_machine_id} HTTP/1.1
Host:
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
No content
Stopped virtual machines will, by default, use the same billing as running ones. Disassociating resources, however, will reduce billing to only include storage costs.
PUT /api/v1/virtual-machines/{virtual_machine_id}/power-status HTTP/1.1
Host:
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 20
{
"status": "started"
}
{
"status": "started"
}
GET /api/v1/instant-deploy-presets/ HTTP/1.1
Host:
Accept: */*
[
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"resources": {
"gpus": {
"h100-sxm5-80gb": {
"count": 1
}
},
"vcpu_count": 4,
"ram_gb": 16,
"storage_gb": 40
},
"operating_system": "Ubuntu 20.04 LTS",
"compute_rate_hourly": "text",
"storage_rate_hourly": "text",
"location_ids_with_availability": [
"123e4567-e89b-12d3-a456-426614174000"
]
}
]
GET /api/v1/instant-deploy-presets/{instant_deploy_preset_id} HTTP/1.1
Host:
Accept: */*
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"resources": {
"gpus": {
"h100-sxm5-80gb": {
"count": 1
}
},
"vcpu_count": 4,
"ram_gb": 16,
"storage_gb": 40
},
"operating_system": "Ubuntu 20.04 LTS",
"compute_rate_hourly": "text",
"storage_rate_hourly": "text",
"location_ids_with_availability": [
"123e4567-e89b-12d3-a456-426614174000"
]
}
GET /api/v1/bare-metal/locations HTTP/1.1
Host:
Accept: */*
Successful Response
{
"results": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"gpu_count_ethernet": 8,
"gpu_price_ethernet": 2.5,
"gpu_count_infiniband": 8,
"gpu_price_infiniband": 2.5,
"specs_per_node": {
"gpu_model": "h100-sxm5-80gb",
"gpu_count": 8,
"cpu_model": "Intel Xeon Platinum 8470",
"cpu_count": 4,
"ram_gb": 16,
"storage_gb": 40
}
}
],
"total_result_count": 1,
"has_previous": true,
"has_next": true
}
Deploys a bare-metal instance based on provided baremetal_config specifications and user organization. This route requires an authorization check.
An associated k8s cluster will also be created.
a3111bd4-550a-47d0-838a-0a52bff2ae3f
My Baremetal Rental
Configuration for organization-associated SSH keys. Can select all, none, or select keys by ID.
{"mode":"none"}
Extra SSH keys which will be added to this deploy only. To use SSH keys registered with your organization, see the organization_ssh_keys
field.
[]
Example: ["ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDAKOgHv82A6Oi7AWLvBC9N..."]
Machine networking: 3.2 Tbps Infiniband or 100 Gbps Ethernet
infiniband
Possible values: If machines are deployed with a specified sub-order, they will only have network access to other machines in the same sub-order. Not specifying a sub-order will put the machine in either the ethernet or infiniband default suborders for your account.
12345
If a storage volume is specified, the machine will be deployed with the storage volume attached.
Tags to add to the machine.
[]
Example: ["tag1","tag2"]
POST /api/v1/bare-metal/ HTTP/1.1
Host:
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 561
{
"location_id": "a3111bd4-550a-47d0-838a-0a52bff2ae3f",
"gpu_count": 1,
"name": "My Baremetal Rental",
"organization_ssh_keys": {
"mode": "selective",
"ssh_key_ids": [
"123e4567-e89b-12d3-a456-426614174000"
]
},
"ssh_keys": [
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDAKOgHv82A6Oi7AWLvBC9N..."
],
"network_type": "infiniband",
"sub_order": "12345",
"storage_id": "123e4567-e89b-12d3-a456-426614174000",
"tags": [
"tag1",
"tag2"
],
"cloudinit_script": {
"packages": [
"text"
],
"write_files": [
{
"encoding": "text",
"content": "text",
"owner": "text",
"path": "text",
"permissions": "text"
}
],
"runcmd": [
"text"
]
}
}
{
"rental_id": "123e4567-e89b-12d3-a456-426614174000",
"warning": "text"
}
20
0
GET /api/v1/bare-metal/ HTTP/1.1
Host:
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"results": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"name": "text",
"creation_timestamp": "2022-01-01T00:00:00Z",
"status": "Running",
"power_status": "Running",
"node_count": 1,
"specs_per_node": {
"gpu_model": "h100-sxm5-80gb",
"gpu_count": 8,
"cpu_model": "Intel Xeon Platinum 8470",
"cpu_count": 4,
"ram_gb": 16,
"storage_gb": 40
},
"rate_hourly": "text",
"network_type": "infiniband",
"username": "text",
"node_networking": [
{
"public_ip": "68.25.82.82",
"private_ip": "192.168.0.1"
}
],
"sub_order": "text",
"storage_id": "123e4567-e89b-12d3-a456-426614174000",
"storage_pv": "text",
"storage_pvc": "text",
"k8s_cluster_id": "123e4567-e89b-12d3-a456-426614174000",
"kubeconfig": "text",
"tags": [
"text"
]
}
],
"total_result_count": 1,
"has_previous": true,
"has_next": true
}
PUT /api/v1/bare-metal/{baremetal_rental_id}/power-status HTTP/1.1
Host:
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 20
{
"status": "started"
}
No content
DELETE /api/v1/bare-metal/{baremetal_rental_id} HTTP/1.1
Host:
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
No content
PATCH /api/v1/bare-metal/{baremetal_rental_id} HTTP/1.1
Host:
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 31
{
"name": "text",
"tags": [
"text"
]
}
{
"name": "text",
"tags": [
"text"
]
}
Reboot nodes in a baremetal rental, by providing a list of their public ips. This will cause the status of your rental to become Pending.
POST /api/v1/bare-metal/{baremetal_rental_id}/reboot HTTP/1.1
Host:
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 23
{
"public_ips": [
"text"
]
}
No content
30
0
2024-10-01
2024-10-26
GET /api/v1/billing/transactions HTTP/1.1
Host:
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"results": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"total_amount": "text",
"timestamp_creation": "2025-06-27T11:56:31.995Z",
"timestamp_completion": "2025-06-27T11:56:31.995Z",
"details": {
"type": "charge",
"linked_instance": {
"type": "virtual_machine_instance",
"id": "123e4567-e89b-12d3-a456-426614174000",
"virtual_machine_id": "123e4567-e89b-12d3-a456-426614174000",
"timestamp_creation": "2025-06-27T11:56:31.995Z",
"timestamp_deletion": "2025-06-27T11:56:31.995Z"
}
},
"period_amount": "text"
}
],
"total_result_count": 1,
"has_previous": true,
"has_next": true
}
2024
10
GET /api/v1/billing/reports/{year}/{month}/transactions HTTP/1.1
Host:
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"transactions": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"total_amount": "text",
"timestamp_creation": "2025-06-27T11:56:31.995Z",
"timestamp_completion": "2025-06-27T11:56:31.995Z",
"details": {
"type": "charge",
"linked_instance": {
"type": "virtual_machine_instance",
"id": "123e4567-e89b-12d3-a456-426614174000",
"virtual_machine_id": "123e4567-e89b-12d3-a456-426614174000",
"timestamp_creation": "2025-06-27T11:56:31.995Z",
"timestamp_deletion": "2025-06-27T11:56:31.995Z"
}
},
"period_amount": "text"
}
],
"balance_at_period_start": "text",
"balance_delta_in_period": "text",
"balance_at_period_end": "text"
}
These SSH public keys can be selected by ID when deploying new rentals to quickly add SSH access for various org members.
150
0
GET /api/v1/organization/ssh-keys HTTP/1.1
Host:
x-api-token: YOUR_API_KEY
Accept: */*
{
"results": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"name": "My-SSH-Public-Key",
"content": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDAKOgHv82A6Oi7AWLvBC9N..."
}
],
"total_result_count": 1,
"has_previous": true,
"has_next": true
}
Add new SSH public keys, registered under unique names, to your organization. These can be selected when deploying new rentals to quickly add access for various org members.
This will not affect active deployments, only those created afterwards.
Label to be associated with this SSH public key. Up to 64 characters, and can only include alphanumeric values, hyphens, or spaces.
My-SSH-Public-Key
The SSH public key contents.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDAKOgHv82A6Oi7AWLvBC9N...
POST /api/v1/organization/ssh-keys HTTP/1.1
Host:
x-api-token: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 104
{
"name": "My-SSH-Public-Key",
"content": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDAKOgHv82A6Oi7AWLvBC9N..."
}
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"name": "My-SSH-Public-Key",
"content": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDAKOgHv82A6Oi7AWLvBC9N..."
}
Remove an SSH public key by its ID.
This will not affect any active instances, only those created after this key's removal.
ID found on the SSH key you wish to delete
DELETE /api/v1/organization/ssh-keys/{ssh_key_id} HTTP/1.1
Host:
x-api-token: YOUR_API_KEY
Accept: */*
No content
POST /api/v1/validate/cloudinit HTTP/1.1
Host:
Content-Type: application/json
Accept: */*
Content-Length: 38
{
"type": "instant-vm",
"content": "text"
}
{
"error": true,
"message": "text"
}
Number of gigabytes to allocate for the storage volume
100
My Storage Volume
[]
Example: ["19793722-5ca1-4791-a412-86a3b9c8050c"]
POST /api/v1/storage/ HTTP/1.1
Host:
x-api-token: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 98
{
"size_in_gb": 100,
"name": "My Storage Volume",
"order_ids": [
"19793722-5ca1-4791-a412-86a3b9c8050c"
]
}
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"size_in_gb": 100,
"name": "My Storage Volume",
"status": "active",
"rate_hourly": "0.017408",
"order_ids": [
"e724424f-a73c-499e-b307-0a63d9b71b5b"
],
"tenant_id": 123,
"vip": "0.0.0.0"
}
20
0
GET /api/v1/storage/ HTTP/1.1
Host:
x-api-token: YOUR_API_KEY
Accept: */*
{
"results": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"size_in_gb": 100,
"name": "My Storage Volume",
"status": "active",
"rate_hourly": "0.017408",
"order_ids": [
"e724424f-a73c-499e-b307-0a63d9b71b5b"
],
"tenant_id": 123,
"vip": "0.0.0.0"
}
],
"total_result_count": 1,
"has_previous": true,
"has_next": true
}
PATCH /api/v1/storage/{storage_id} HTTP/1.1
Host:
x-api-token: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 83
{
"size_in_gb": 1,
"name": "text",
"order_ids": [
"123e4567-e89b-12d3-a456-426614174000"
]
}
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"size_in_gb": 100,
"name": "My Storage Volume",
"status": "active",
"rate_hourly": "0.017408",
"order_ids": [
"e724424f-a73c-499e-b307-0a63d9b71b5b"
],
"tenant_id": 123,
"vip": "0.0.0.0"
}
GET /api/v1/storage/{storage_id} HTTP/1.1
Host:
x-api-token: YOUR_API_KEY
Accept: */*
{
"used_capacity_bytes": 1,
"id": "123e4567-e89b-12d3-a456-426614174000",
"size_in_gb": 100,
"name": "My Storage Volume",
"status": "active",
"rate_hourly": "0.017408",
"order_ids": [
"e724424f-a73c-499e-b307-0a63d9b71b5b"
],
"tenant_id": 123,
"vip": "0.0.0.0"
}
Last updated