This endpoint retrieves all currently available live K-Series workstation-based GPU offers in real time. It returns detailed configuration names, hardware specifications (including CPU cores, system RAM, disk storage, and VRAM), available node counts, and transparent hourly pricing.
Get All Available Offers - Overview
The K-Series GPU Offers API allows authenticated users to retrieve all currently available live K-Series GPU Instances offers.
The endpoint returns the latest available GPU offers in real time, including GPU configurations, available nodes, GPU models, GPU counts, CPU cores, RAM, VRAM, disk capacity, public IP availability, and hourly pricing.
Use this endpoint to review available K-Series GPU configurations and their pricing before creating an instance.
Endpoint
| Property | Value |
|---|---|
| HTTP Method | GET |
| Endpoint | /kseries/offers |
| Full URL | https://cloud.dataoorts.com/api/v1/kseries/offers |
| Authentication | Bearer Token |
| Response Format | JSON |
Authentication
This endpoint requires a valid Dataoorts Unify API key.
Include your API key in the Authorization header using the Bearer authentication scheme.
Authorization: Bearer YOUR_API_KEY
Accept: application/jsonGenerate or manage your API key through the Dataoorts Unify API.
Keep your API key confidential and never expose it in public repositories or client-side applications.
Request Parameters
This endpoint does not require any query parameters or a request body. Send a GET request with the required authentication header.
Request Examples
cURL - Use the following command to retrieve all currently available K-Series GPU offers:
curl --request GET \
--url "https://cloud.dataoorts.com/api/v1/kseries/offers" \
--header "Authorization: Bearer YOUR_API_KEY" \
--header "Accept: application/json"Replace YOUR_API_KEY with your actual Dataoorts Unify API key.
Python Example Implementation
The following example uses the requests library to retrieve all live K-Series GPU offers. It reads the API key from an environment variable, handles unsuccessful HTTP responses, and checks the response format before processing the returned data.
Install the required dependency:
pip install requestsimport os
import requests
API_URL = "https://cloud.dataoorts.com/api/v1/kseries/offers"
def get_kseries_live_offers(api_key: str) -> dict | None:
"""
Retrieve all currently available live K-Series GPU offers.
Args:
api_key: Your Dataoorts Unify API key.
Returns:
The JSON response containing available GPU offers,
or None if the API returns a non-JSON response.
Raises:
requests.exceptions.RequestException:
If the HTTP request fails or returns an unsuccessful
HTTP status code.
ValueError:
If the response contains invalid JSON.
"""
headers = {
"Authorization": f"Bearer {api_key}",
"Accept": "application/json",
}
response = requests.get(
API_URL,
headers=headers,
timeout=60,
)
response.raise_for_status()
content_type = response.headers.get("Content-Type", "")
if "application/json" not in content_type.lower():
print("Non-JSON response received:")
print(response.text[:500])
return None
try:
return response.json()
except requests.exceptions.JSONDecodeError as exc:
raise ValueError(
"The API returned an invalid JSON response."
) from exc
if __name__ == "__main__":
api_key = os.getenv("DATAOORTS_API_KEY")
if not api_key:
raise RuntimeError(
"Set the DATAOORTS_API_KEY environment variable."
)
try:
result = get_kseries_live_offers(api_key)
if result is not None:
print("Status:", result.get("status"))
print("Message:", result.get("message"))
print("Currency:", result.get("currency"))
print("Total Offers:", result.get("count"))
print("\nAvailable K-Series GPU Offers")
for offer in result.get("offers", []):
print("-" * 40)
print("Offer Name:", offer.get("name"))
print("GPU:", offer.get("gpu"))
print("GPU Count:", offer.get("gpus"))
print("Available Nodes:", offer.get("available_nodes"))
print("Hourly Cost:", offer.get("cost_per_hour"))
print("CPUs:", offer.get("cpus"))
print("RAM (GB):", offer.get("ram_gb"))
print("VRAM (GB):", offer.get("vram_gb"))
print("Disk (GB):", offer.get("disk_gb"))
print("Public IP Available:", offer.get("public_ip"))
except requests.exceptions.RequestException as exc:
print(f"API request failed: {exc}.")
except ValueError as exc:
print(f"Invalid API response: {exc}.")Set your API key before running the script.
Linux / macOS
export DATAOORTS_API_KEY="YOUR_API_KEY"
python kseries_offers.pyWindows PowerShell
$env:DATAOORTS_API_KEY="YOUR_API_KEY"
python kseries_offers.pyThe script displays the total number of offers and currency first, followed by each GPU configuration, available nodes, hourly cost, and hardware specifications.
Example Success Response
A successful request returns a JSON object containing the number of available offers, currency, individual GPU configurations, a descriptive message, and the response status.
{
"count": 21,
"currency": "USD",
"message": "Live K-Series GPU offers retrieved successfully.",
"offers": [
{
"available_nodes": 1,
"cost_per_hour": 6.820000000000001,
"cpus": 44,
"disk_gb": 3400,
"gpu": "4x RTX PRO 6000 Max-Q",
"gpus": 4,
"name": "rtxpro6000mq-11-56-850-1lg.4",
"public_ip": "No",
"ram_gb": 224,
"vram_gb": 384
},
{
"available_nodes": 1,
"cost_per_hour": 5.115000000000001,
"cpus": 33,
"disk_gb": 2550,
"gpu": "3x RTX PRO 6000 Max-Q",
"gpus": 3,
"name": "rtxpro6000mq-11-56-850-1lg.3",
"public_ip": "No",
"ram_gb": 168,
"vram_gb": 288
},
{
"available_nodes": 1,
"cost_per_hour": 3.4100000000000006,
"cpus": 22,
"disk_gb": 1700,
"gpu": "2x RTX PRO 6000 Max-Q",
"gpus": 2,
"name": "rtxpro6000mq-11-56-850-1lg.2",
"public_ip": "No",
"ram_gb": 112,
"vram_gb": 192
},
{
"available_nodes": 1,
"cost_per_hour": 1.7050000000000003,
"cpus": 11,
"disk_gb": 850,
"gpu": "1x RTX PRO 6000 Max-Q",
"gpus": 1,
"name": "rtxpro6000mq-11-56-850-1lg.1",
"public_ip": "No",
"ram_gb": 56,
"vram_gb": 96
},
{
"available_nodes": 1,
"cost_per_hour": 3.8280000000000003,
"cpus": 60,
"disk_gb": 9600,
"gpu": "12x V100 SXM3",
"gpus": 12,
"name": "v100-5-85-800-generic.12",
"public_ip": "Yes",
"ram_gb": 1020,
"vram_gb": 384
},
{
"available_nodes": 1,
"cost_per_hour": 3.5090000000000003,
"cpus": 55,
"disk_gb": 8800,
"gpu": "11x V100 SXM3",
"gpus": 11,
"name": "v100-5-85-800-generic.11",
"public_ip": "Yes",
"ram_gb": 935,
"vram_gb": 352
},
{
"available_nodes": 1,
"cost_per_hour": 3.19,
"cpus": 50,
"disk_gb": 8000,
"gpu": "10x V100 SXM3",
"gpus": 10,
"name": "v100-5-85-800-generic.10",
"public_ip": "Yes",
"ram_gb": 850,
"vram_gb": 320
},
{
"available_nodes": 1,
"cost_per_hour": 2.871,
"cpus": 45,
"disk_gb": 7200,
"gpu": "9x V100 SXM3",
"gpus": 9,
"name": "v100-5-85-800-generic.9",
"public_ip": "Yes",
"ram_gb": 765,
"vram_gb": 288
},
{
"available_nodes": 1,
"cost_per_hour": 2.552,
"cpus": 40,
"disk_gb": 6400,
"gpu": "8x V100 SXM3",
"gpus": 8,
"name": "v100-5-85-800-generic.8",
"public_ip": "Yes",
"ram_gb": 680,
"vram_gb": 256
},
{
"available_nodes": 1,
"cost_per_hour": 2.233,
"cpus": 35,
"disk_gb": 5600,
"gpu": "7x V100 SXM3",
"gpus": 7,
"name": "v100-5-85-800-generic.7",
"public_ip": "Yes",
"ram_gb": 595,
"vram_gb": 224
},
{
"available_nodes": 1,
"cost_per_hour": 1.9140000000000001,
"cpus": 30,
"disk_gb": 4800,
"gpu": "6x V100 SXM3",
"gpus": 6,
"name": "v100-5-85-800-generic.6",
"public_ip": "Yes",
"ram_gb": 510,
"vram_gb": 192
},
{
"available_nodes": 1,
"cost_per_hour": 1.595,
"cpus": 25,
"disk_gb": 4000,
"gpu": "5x V100 SXM3",
"gpus": 5,
"name": "v100-5-85-800-generic.5",
"public_ip": "Yes",
"ram_gb": 425,
"vram_gb": 160
},
{
"available_nodes": 1,
"cost_per_hour": 1.276,
"cpus": 20,
"disk_gb": 3200,
"gpu": "4x V100 SXM3",
"gpus": 4,
"name": "v100-5-85-800-generic.4",
"public_ip": "Yes",
"ram_gb": 340,
"vram_gb": 128
},
{
"available_nodes": 1,
"cost_per_hour": 0.9570000000000001,
"cpus": 15,
"disk_gb": 2400,
"gpu": "3x V100 SXM3",
"gpus": 3,
"name": "v100-5-85-800-generic.3",
"public_ip": "Yes",
"ram_gb": 255,
"vram_gb": 96
},
{
"available_nodes": 2,
"cost_per_hour": 0.638,
"cpus": 10,
"disk_gb": 1600,
"gpu": "2x V100 SXM3",
"gpus": 2,
"name": "v100-5-85-800-generic.2",
"public_ip": "Yes",
"ram_gb": 170,
"vram_gb": 64
},
{
"available_nodes": 2,
"cost_per_hour": 0.30624,
"cpus": 4,
"disk_gb": 800,
"gpu": "1x V100 SXM3",
"gpus": 1,
"name": "v100-5-85-800-generic.1",
"public_ip": "Yes",
"ram_gb": 85,
"vram_gb": 32
},
{
"available_nodes": 1,
"cost_per_hour": 4.785,
"cpus": 75,
"disk_gb": 12000,
"gpu": "15x V100 SXM3",
"gpus": 15,
"name": "v100-5-85-800-generic.15",
"public_ip": "Yes",
"ram_gb": 1275,
"vram_gb": 480
},
{
"available_nodes": 1,
"cost_per_hour": 4.466,
"cpus": 70,
"disk_gb": 11200,
"gpu": "14x V100 SXM3",
"gpus": 14,
"name": "v100-5-85-800-generic.14",
"public_ip": "Yes",
"ram_gb": 1190,
"vram_gb": 448
},
{
"available_nodes": 1,
"cost_per_hour": 4.147,
"cpus": 65,
"disk_gb": 10400,
"gpu": "13x V100 SXM3",
"gpus": 13,
"name": "v100-5-85-800-generic.13",
"public_ip": "Yes",
"ram_gb": 1105,
"vram_gb": 416
},
{
"available_nodes": 1,
"cost_per_hour": 1.0120000000000002,
"cpus": 30,
"disk_gb": 800,
"gpu": "2x RTX 4090",
"gpus": 2,
"name": "rtx49-15-80-400-ec.2",
"public_ip": "Yes",
"ram_gb": 160,
"vram_gb": 48
},
{
"available_nodes": 1,
"cost_per_hour": 0.52624,
"cpus": 15,
"disk_gb": 400,
"gpu": "1x RTX 4090",
"gpus": 1,
"name": "rtx49-15-80-400-ec.1",
"public_ip": "Yes",
"ram_gb": 80,
"vram_gb": 24
}
],
"status": "success"
}The values above illustrate the response structure. The number of offers, available nodes, configurations, and prices may differ in subsequent API responses.
Response Fields
| Field | Type | Description |
|---|---|---|
status | String | Indicates the result of the API request. A successful response returns success; an unsuccessful response may return error. |
message | String | A descriptive message about the result of the request. |
count | Integer | Number of live GPU offers returned in the response. |
currency | String | Currency used for pricing. The example response returns USD. |
offers | Array of objects | List of currently available K-Series GPU offers. |
Offer Fields
Each object in the offers array represents an available K-Series GPU configuration.
| Field | Type | Description |
|---|---|---|
name | String | Identifier or name of the GPU configuration. |
gpu | String | Display name of the GPU config, including GPU count and model. |
gpus | Integer | Number of GPUs included in the configuration. |
available_nodes | Integer | Number of nodes reported as available for the configuration. |
cost_per_hour | Float | Hourly cost reported for the GPU configuration. |
public_ip | String | Indicates whether a public IP is available for the offer. The example returns Yes or No. |
cpus | Integer | Number of CPUs reported for the configuration. |
ram_gb | Integer | RAM capacity in GB. |
vram_gb | Integer | Total GPU VRAM capacity in GB as reported for the configuration. |
disk_gb | Integer | Disk capacity in GB. |
Understanding K-Series GPU Offers
GPU Configuration
The name, gpu, and gpus fields identify the available GPU configurations.
The example response includes configurations for RTX PRO 6000 Max-Q, V100 SXM3, and RTX 4090 GPUs, with different GPU counts and hardware specifications. Use the name field to identify a configuration when working with the relevant K-Series instance management endpoint.
Available Nodes
The available_nodes field indicates the number of nodes reported as available for a given configuration. In the example response, most offers report one available node, while some V100 SXM3 configurations report two available nodes. Because offers are returned live, availability may change between requests.
Hourly Pricing
The cost_per_hour field reports the hourly cost for the configuration. The response's currency field specifies the currency used for pricing.
Hardware Specifications
The offer fields provide the CPU count, RAM capacity, GPU VRAM capacity, and disk capacity reported for each configuration. Use these fields to compare configurations and identify offers that meet your compute and memory requirements.
Public IP Availability
The public_ip field indicates whether a public IP is available for the listed configuration. In the example response, its value is either Yes or No. Check the value returned for the specific offer when reviewing connectivity requirements.
Important Notes
1. Live Offers: This endpoint returns GPU offers available at the time of the request. Availability and pricing may change between requests.
2. Authentication: A valid Dataoorts Unify API key is required to retrieve offers.
3. Pricing Currency: All prices are returned in USD in the supplied response.
4. Available Nodes: The available_nodes field indicates the node availability reported for each offer. Check the latest response before selecting a configuration.
5. Hardware Specifications: Use cpus, ram_gb, vram_gb, and disk_gb to review the specifications returned for an Instance offer.
6. Public IP: Check the public_ip field when reviewing whether an offer reports public IP availability.
7. Empty Results: If no offers are currently available, API returns an empty offers array with count set to 0.
8. API Key Security: Keep your API key confidential and store it in the DATAOORTS_API_KEY environment variable rather than hardcoding it in your application.
Error Handling
The API may return an unsuccessful HTTP status code and a JSON error response when a request cannot be completed.
Your application should handle authentication failures, upstream service errors, network errors, request timeouts, server errors, and unexpected response formats.
In Python, response.raise_for_status() raises an exception for unsuccessful HTTP status codes. Example also checks the response content type and handles JSON decoding errors before processing the offer data.
Unauthorized — Missing API Key
HTTP Status: 401 Unauthorized
{
"status": "error",
"message": "Authorization header with 'Bearer <TOKEN>' is required."
}This response indicates that the required Bearer authentication header was not provided.
Invalid API Key
HTTP Status: 403 Forbidden
{
"status": "error",
"message": "Unauthorized: Invalid API key."
}Verify that your Dataoorts API key is valid and included in the Authorization header.
Upstream Service Error
HTTP Status: 502 Bad Gateway
{
"status": "error",
"message": "DDRA API error, please try again later."
}This response indicates an upstream service error. Try again later if the issue persists.
Internal Server Error
HTTP Status: 500 Internal Server Error
{
"status": "error",
"message": "Internal Server Error, Please Contact Support."
}If the error persists, Contact the Dataoorts Support Team at [email protected] for assistance.
General Error Handling
| Scenario | Recommended Handling |
|---|---|
| API key is missing | Include the Authorization header with a valid Bearer token. |
| API key is invalid | Verify the API key through the Dataoorts platform. |
Upstream service returns 502 | Retry later if appropriate. |
API returns 500 | Contact support if the error persists. |
| Request fails | Catch requests.exceptions.RequestException and inspect the error details. |
| Response is not JSON | Inspect the returned response text without attempting to parse it as JSON. |
| Response contains invalid JSON | Handle the JSON decoding error before accessing response fields. |
| No offers are available | Check count and offers; an empty list with a count of 0 indicates no offers were returned. |
Get Help and Support
For assistance with K-Series GPU offers or API integration, Contact support team at [email protected].
