Get All Available Offers

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

PropertyValue
HTTP MethodGET
Endpoint/kseries/offers
Full URLhttps://cloud.dataoorts.com/api/v1/kseries/offers
AuthenticationBearer Token
Response FormatJSON

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/json

Generate 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 requests
import 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.py

Windows PowerShell

$env:DATAOORTS_API_KEY="YOUR_API_KEY"
python kseries_offers.py

The 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

FieldTypeDescription
statusStringIndicates the result of the API request. A successful response returns success; an unsuccessful response may return error.
messageStringA descriptive message about the result of the request.
countIntegerNumber of live GPU offers returned in the response.
currencyStringCurrency used for pricing. The example response returns USD.
offersArray of objectsList of currently available K-Series GPU offers.

Offer Fields

Each object in the offers array represents an available K-Series GPU configuration.

FieldTypeDescription
nameStringIdentifier or name of the GPU configuration.
gpuStringDisplay name of the GPU config, including GPU count and model.
gpusIntegerNumber of GPUs included in the configuration.
available_nodesIntegerNumber of nodes reported as available for the configuration.
cost_per_hourFloatHourly cost reported for the GPU configuration.
public_ipStringIndicates whether a public IP is available for the offer. The example returns Yes or No.
cpusIntegerNumber of CPUs reported for the configuration.
ram_gbIntegerRAM capacity in GB.
vram_gbIntegerTotal GPU VRAM capacity in GB as reported for the configuration.
disk_gbIntegerDisk 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

ScenarioRecommended Handling
API key is missingInclude the Authorization header with a valid Bearer token.
API key is invalidVerify the API key through the Dataoorts platform.
Upstream service returns 502Retry later if appropriate.
API returns 500Contact support if the error persists.
Request failsCatch requests.exceptions.RequestException and inspect the error details.
Response is not JSONInspect the returned response text without attempting to parse it as JSON.
Response contains invalid JSONHandle the JSON decoding error before accessing response fields.
No offers are availableCheck 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].