Volt API Reference
Deploy and manage confidential Intel TDX GPU pods, SSH keys, templates, and Docker credentials through a single REST API. Every pod is hardware-sealed with encrypted memory and attestation.
Quick Start
Everything you need to make your first API call in under a minute.
Base URL & Authentication
All Volt API endpoints live under a single base URL. Every request must include your API key in the X-API-Key header.
Base URL
https://api.voltagegpu.com/api/voltAuthentication Header
X-API-Key: volt_xxxExample: List Your Pods
curl -X GET \
https://api.voltagegpu.com/api/volt/pods \
-H "X-API-Key: volt_xxx"Response Format
All responses are JSON. Successful requests return 2xx status codes. Errors include a message field describing what went wrong.
Authentication
Secure API key authentication with scoped permissions and rate limiting.
API Key Setup
Generate an API key from the VoltageGPU dashboard. Navigate to Dashboard → API Keys → Generate. Your key is shown once — store it securely.
Header Format
X-API-Key: <your-key>Rate Limits
The API enforces a rate limit of 1,000 requests per hour per API key. Exceeding this limit returns 429 Too Many Requests. The response includes Retry-After header with seconds until the window resets.
Key Permissions
Each API key has access to the following resource scopes:
- pods — Create, read, start, stop and delete confidential Intel TDX pods
- templates — Manage Docker image templates
- ssh-keys — Add and remove SSH public keys
- docker-credentials — Store private registry credentials
- machines — Browse confidential GPU inventory and live pricing
Keep Your Key Secret
Never expose your API key in client-side code, public repositories, or logs. If compromised, revoke it immediately from the dashboard and generate a new one.
Confidential Pods API
Deploy and manage Intel TDX confidential GPU pods with encrypted memory and hardware attestation.
List & Manage Confidential Pods
/api/volt/podsList all your confidential pods
curl -X GET \
https://api.voltagegpu.com/api/volt/pods \
-H "X-API-Key: volt_xxx"// Response 200 — array of pods (confidential entries flagged)
[
{
"id": "wl_01h...",
"name": "cm_01h...",
"status": "RUNNING",
"gpu_type": "Confidential GPU",
"gpu_count": 1,
"hourly_price": 3.60,
"created_at": "2026-03-15T10:30:00Z",
"updated_at": "2026-03-15T10:31:12Z",
"ssh_host": "ssh.deployments.targon.com",
"provider": "confidential",
"confidential_compute": true
}
]/api/volt/podsCreate a confidential Intel TDX pod. Always pass provider: "confidential", then either (a) an explicit resource_name + image pair, or (b) a template_uid from GET /api/volt/templates. Your balance is debited one hour upfront at deploy.
// Option A — explicit image + resource
curl -X POST \
https://api.voltagegpu.com/api/volt/pods \
-H "X-API-Key: volt_xxx" \
-H "Content-Type: application/json" \
-d '{
"provider": "confidential",
"name": "my-confidential-pod",
"resource_name": "h200-small",
"image": "pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel",
"ssh_key_uids": ["key_abc123"]
}'// Option B — from a curated template
curl -X POST \
https://api.voltagegpu.com/api/volt/pods \
-H "X-API-Key: volt_xxx" \
-H "Content-Type: application/json" \
-d '{
"provider": "confidential",
"name": "deepseek-infer",
"template_uid": "tpl-5npuuq70m1uo"
}'// Response 201
{
"success": true,
"pod": {
"id": "cl_01h...",
"workloadUid": "wl_01h...",
"name": "my-confidential-pod",
"resource_name": "h200-small",
"image": "pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel",
"hourlyPrice": 3.60,
"status": "RUNNING",
"provider": "confidential",
"ssh_command": "ssh wl_01h...@ssh.deployments.targon.com"
}
}Required fields & billing
provider and name are always required. You must supply EITHER template_uid OR both resource_name and image. Pricing is resolved server-side from the confidential inventory and the VoltageGPU markup is applied automatically — any cost_per_hour sent in the body is ignored. If ssh_key_uids is omitted, one of your existing SSH keys is auto-synced.
Intel TDX Confidential Compute
All pods run on Intel TDX hardware with encrypted memory and Protected PCIe. Data is protected from the host operator and the hypervisor. Available resource_name values come from GET /api/volt/machines (typical values include h200-small, h200-large, b200-small, b200-large — but always read the live inventory).
/api/volt/pods/:idGet full details for a specific pod including IP, ports, and resource usage
curl -X GET \
https://api.voltagegpu.com/api/volt/pods/pod_def456 \
-H "X-API-Key: volt_xxx"// Response 200 — confidential workload details
{
"uid": "wl_01h...",
"name": "my-confidential-pod",
"resource_name": "h200-small",
"image": "pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel",
"type": "rental",
"status": "RUNNING",
"created_at": "2026-03-28T14:00:00Z"
}Connecting over SSH
Confidential pods are reached through the SSH gateway. Use the command returned at creation: ssh <workload_uid>@ssh.deployments.targon.com. No separate IP or port is exposed.
/api/volt/pods/:id/stopRelease a confidential pod. For Intel TDX pods this destroys the enclave and is equivalent to DELETE /api/volt/pods/:id. Confidential pods cannot be paused and resumed.
curl -X POST \
https://api.voltagegpu.com/api/volt/pods/pod_def456/stop \
-H "X-API-Key: volt_xxx"// Response 200
{
"success": true
}/api/volt/pods/:idPermanently destroy a confidential pod and its enclave. This action cannot be undone.
curl -X DELETE \
https://api.voltagegpu.com/api/volt/pods/wl_01h... \
-H "X-API-Key: volt_xxx"// Response 200
{
"success": true
}Deletion is Permanent
Destroying a confidential pod tears down the Intel TDX enclave. Everything inside the enclave memory and local filesystem is unrecoverable by design — that is the point of hardware-sealed compute. Push any outputs to external storage before deleting.
Machines
Query available confidential Intel TDX GPU inventory with live pricing and hardware specs.
Available Confidential Machines
/api/volt/machinesList all available confidential GPU machines with live pricing and availability
curl -X GET \
https://api.voltagegpu.com/api/volt/machines \
-H "X-API-Key: volt_xxx"// Response 200 — confidential machines entries
[
{
"name": "H200 [Confidential]",
"price": 3.60,
"rental_rate": 3.60,
"p_min": 2.40,
"p_max": 3.60,
"base_price": 2.40,
"total_gpu_count": 8,
"k": 1,
"provider": "confidential",
"resource_name": "h200-small",
"gpu_type": "H200",
"gpu_count": 1,
"vcpu": 32,
"memory": 256,
"confidential_compute": true
}
]Live inventory & resource_name
The resource_name field is what you pass to POST /api/volt/pods. The price already includes VoltageGPU's markup — base_price is the upstream per-hour cost you feed back as cost_per_hour when creating a pod. Only entries flagged confidential_compute: true are eligible for confidential deploys.
SSH Keys
Manage SSH public keys used for secure shell access to your GPU pods.
SSH Key Management
/api/volt/ssh-keysList all SSH public keys associated with your account
curl -X GET \
https://api.voltagegpu.com/api/volt/ssh-keys \
-H "X-API-Key: volt_xxx"// Response 200
{
"ssh_keys": [
{
"id": "key_abc123",
"name": "work-laptop",
"public_key": "ssh-ed25519 AAAAC3Nz...truncated",
"fingerprint": "SHA256:xR3j8K...",
"created_at": "2026-01-10T08:00:00Z"
}
],
"total": 1
}/api/volt/ssh-keysAdd a new SSH public key to your account
curl -X POST \
https://api.voltagegpu.com/api/volt/ssh-keys \
-H "X-API-Key: volt_xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "ci-server",
"public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG..."
}'// Response 201
{
"id": "key_def456",
"name": "ci-server",
"public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG...",
"fingerprint": "SHA256:mK8p2Q...",
"created_at": "2026-03-28T15:00:00Z"
}/api/volt/ssh-keys/:idRemove an SSH key from your account. Running pods keep existing authorized keys until redeployed.
curl -X DELETE \
https://api.voltagegpu.com/api/volt/ssh-keys/key_def456 \
-H "X-API-Key: volt_xxx"// Response 200
{
"id": "key_def456",
"deleted": true,
"message": "SSH key removed from account."
}Templates
Curated, read-only Confidential Compute templates maintained by the provider (Jupyter, Ubuntu, DeepSeek-R1, GLM-4.6, Kimi-K2, Qwen3-Coder, GPT-OSS-120B, MiniMax and more). Use a template_uid in POST /api/volt/pods to deploy a pod with a pre-configured image, resource, commands, args and exposed ports.
Template Catalog
/api/volt/templatesList all curated public templates (cached 2 minutes)
curl -X GET \
https://api.voltagegpu.com/api/volt/templates \
-H "X-API-Key: volt_xxx"// Response 200
{
"success": true,
"items": [
{
"uid": "tpl-5npuuq70m1uo",
"name": "DeepSeek-R1",
"description": "DeepSeek-R1 reasoning model (sglang, 8x H200)",
"type": "SERVERLESS",
"image": "lmsysorg/sglang:v0.5.5.post3",
"resource_name": "h200-xlarge",
"visibility": "PUBLIC"
},
{
"uid": "tpl-ibnkqwo0esy4",
"name": "Jupyter Notebook",
"description": "Base image for Jupyter Notebook stacks",
"type": "RENTAL",
"image": "jupyter/base-notebook",
"resource_name": "cpu-small",
"visibility": "PUBLIC"
}
]
}/api/volt/templates/:uidFetch a single template with the full manifest (commands, args, ports, env)
curl -X GET \
https://api.voltagegpu.com/api/volt/templates/tpl-5npuuq70m1uo \
-H "X-API-Key: volt_xxx"Curated, read-only
Templates are maintained by the upstream provider and cannot be created, updated or deleted via the API — POST, PUT and DELETE return 405 Method Not Allowed. To run a custom image, skip templates entirely and pass a raw image + resource_name to POST /api/volt/pods.
Docker Credentials
Store private Docker registry credentials so pods can pull custom images.
Registry Credentials
/api/volt/docker-credentialsList all stored Docker registry credentials (passwords are redacted)
curl -X GET \
https://api.voltagegpu.com/api/volt/docker-credentials \
-H "X-API-Key: volt_xxx"// Response 200
{
"credentials": [
{
"id": "cred_abc123",
"name": "GitHub Container Registry",
"registry": "ghcr.io",
"username": "my-org",
"created_at": "2026-02-15T12:00:00Z"
}
],
"total": 1
}/api/volt/docker-credentialsAdd credentials for a private Docker registry
curl -X POST \
https://api.voltagegpu.com/api/volt/docker-credentials \
-H "X-API-Key: volt_xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "AWS ECR Production",
"registry": "123456789.dkr.ecr.us-east-1.amazonaws.com",
"username": "AWS",
"password": "eyJwYXlsb2FkIjoiNGZ..."
}'// Response 201
{
"id": "cred_def456",
"name": "AWS ECR Production",
"registry": "123456789.dkr.ecr.us-east-1.amazonaws.com",
"username": "AWS",
"created_at": "2026-03-28T16:30:00Z"
}/api/volt/docker-credentials/:idGet details for a specific credential (password is always redacted)
curl -X GET \
https://api.voltagegpu.com/api/volt/docker-credentials/cred_abc123 \
-H "X-API-Key: volt_xxx"// Response 200
{
"id": "cred_abc123",
"name": "GitHub Container Registry",
"registry": "ghcr.io",
"username": "my-org",
"created_at": "2026-02-15T12:00:00Z"
}/api/volt/docker-credentials/:idDelete a stored credential. Templates referencing it will fail to pull on next deploy.
curl -X DELETE \
https://api.voltagegpu.com/api/volt/docker-credentials/cred_def456 \
-H "X-API-Key: volt_xxx"// Response 200
{
"id": "cred_def456",
"deleted": true,
"message": "Docker credential removed."
}API Keys
Programmatically manage your Volt API keys. List, create, and revoke keys without leaving the terminal.
API Key Management
/api/volt/api-keysList all API keys for your account (key values are partially redacted)
curl -X GET \
https://api.voltagegpu.com/api/volt/api-keys \
-H "X-API-Key: volt_xxx"// Response 200
{
"api_keys": [
{
"id": "ak_001",
"name": "Production Key",
"key_preview": "volt_...x7f2",
"last_used": "2026-03-28T12:00:00Z",
"created_at": "2026-01-05T08:00:00Z"
}
],
"total": 1
}/api/volt/api-keysGenerate a new API key. The full key is returned only once in this response.
curl -X POST \
https://api.voltagegpu.com/api/volt/api-keys \
-H "X-API-Key: volt_xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "CI/CD Pipeline"
}'// Response 201
{
"id": "ak_002",
"name": "CI/CD Pipeline",
"key": "volt_sk_live_a1b2c3d4e5f6g7h8i9j0...",
"created_at": "2026-03-28T17:00:00Z",
"message": "Store this key securely. It will not be shown again."
}Save Your Key Immediately
The full API key is only returned in the creation response. Store it in a secrets manager or environment variable. If lost, delete the key and create a new one.
/api/volt/api-keysRevoke an API key by ID. Pass the key ID in the request body. Takes effect immediately.
curl -X DELETE \
https://api.voltagegpu.com/api/volt/api-keys \
-H "X-API-Key: volt_xxx" \
-H "Content-Type: application/json" \
-d '{
"key_id": "ak_002"
}'// Response 200
{
"id": "ak_002",
"deleted": true,
"message": "API key revoked. Any requests using this key will now return 401."
}Error Codes
Standard HTTP status codes returned by the Volt API with their meanings.
HTTP Status Reference
| Code | Status | Description |
|---|---|---|
| 200 | OK | Request succeeded. Response body contains the requested data. |
| 201 | Created | Resource created successfully (pods, keys, templates, jobs). |
| 400 | Bad Request | Invalid request body or missing required fields. Check the message field for details. |
| 401 | Unauthorized | Missing or invalid API key. Ensure the X-API-Key header is set correctly. |
| 402 | Payment Required | Insufficient account balance to perform the action. Add funds via the billing page. |
| 404 | Not Found | The requested resource does not exist or does not belong to your account. |
| 429 | Too Many Requests | Rate limit exceeded (1,000 req/hour). Wait for the Retry-After period. |
| 500 | Internal Server Error | Unexpected server error. Retry with exponential backoff. Contact support if persistent. |
| 502 | Bad Gateway | Upstream provider temporarily unavailable. Retry after a few seconds. |
Error Response Format
// All errors follow this structure
{
"error": true,
"status": 401,
"message": "Invalid API key. Generate a new key at Dashboard > API Keys.",
"code": "INVALID_API_KEY"
}Retry Strategy
For 429, 500, and 502 errors, implement exponential backoff starting at 1 second with a maximum of 5 retries. The Retry-After header is included on rate-limited responses.
Ready to Build with the Volt API?
Generate your API key and deploy your first pod in under 60 seconds.