# Instance Types

> Browse GPU instance types, hourly pricing, and daily price history across cloud providers. These endpoints power comparison views and GPU price charts and are available without authentication.

**URL:** https://inference.sh/docs/api/rest/instances
**Last updated:** 2026-10-11

---

Browse GPU instance types, hourly pricing, and daily price history across cloud providers. These endpoints power comparison views and GPU price charts and are available without authentication.

---

## List instance types

`GET /instances/types`

Returns GPU instance types aggregated from cloud providers (via Shadeform). Results are filtered to common GPU families (for example A100, H100, L40S, RTX series).

No API key is required. Responses are cached for one hour (`Cache-Control: public, max-age=3600`).

### Query parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `gpu_type` | string | Filter by GPU model name (for example `H100`, `A100`) |
| `num_gpus` | string | Filter by GPU count (for example `1`, `8`) |
| `cloud` | string | Filter by provider key (for example `aws`, `runpod`, `lambdalabs`) |
| `region` | string | Filter by region code |
| `available` | string | When `true`, only types with at least one available region |
| `shade_instance_type` | string | Filter by instance type key |
| `rental_type` | string | `on_demand` or `spot`. Keeps only that rental type's `availability` entries; with `available=true`, drops types that have none in stock |
| `sort` | string | Sort order (passed through to the provider catalog) |

### Response

The body is a JSON array of instance type objects under `data`.

```json
[
  {
    "id": "runpod.NVIDIA H100 80GB HBM3",
    "cloud": "runpod",
    "cloud_logo_url": "https://cloud.inference.sh/logos/runpod.com.png",
    "region": "us-east-1",
    "shade_instance_type": "NVIDIA H100 80GB HBM3",
    "cloud_instance_type": "gpu_1x_h100_sxm5",
    "deployment_type": "vm",
    "hourly_price": 299,
    "configuration": {
      "gpu_type": "H100",
      "gpu_manufacturer": "nvidia",
      "interconnect": "sxm5",
      "memory_in_gb": 180,
      "num_gpus": 1,
      "nvlink": false,
      "os_options": ["ubuntu22.04"],
      "storage_in_gb": 500,
      "vcpus": 26,
      "vram_per_gpu_in_gb": 80
    },
    "availability": [
      { "available": true, "region": "us-east-1", "rental_type": "on_demand" },
      { "available": true, "region": "us-east-1", "rental_type": "spot", "hourly_price": 120 }
    ],
    "boot_time": {
      "average_seconds": 420,
      "updated_at": "2026-05-20T12:00:00Z",
      "sample_size": 120
    }
  }
]
```

### Fields

| Field | Description |
|-------|-------------|
| `id` | Stable id (`{cloud}.{shade_instance_type}`) |
| `cloud` | Provider key (`aws`, `runpod`, `lambdalabs`, …) |
| `cloud_logo_url` | Provider logo URL (`https://cloud.inference.sh/logos/{domain}.png`) |
| `region` | Default or selected region for this row |
| `shade_instance_type` | Provider catalog name |
| `cloud_instance_type` | Provider-specific SKU or machine type |
| `deployment_type` | `vm`, `container`, or `baremetal` |
| `hourly_price` | On-demand price in **cents** per hour (divide by 100 for USD) |
| `configuration` | GPU and machine specs (see below) |
| `availability` | Per-region availability flags. Each entry has a `rental_type` (`on_demand` or `spot`); types that offer spot list a region once per rental type. Spot entries carry their own `hourly_price` in cents. Spot instances are cheaper but the provider can reclaim them at any time |
| `boot_time` | Optional average boot time stats |

#### `configuration`

| Field | Description |
|-------|-------------|
| `gpu_type` | GPU model name |
| `gpu_manufacturer` | Chip vendor (for example `nvidia`, `amd`) |
| `interconnect` | Interconnect type when applicable |
| `num_gpus` | Number of GPUs |
| `nvlink` | Whether NVLink is available on this type |
| `vram_per_gpu_in_gb` | VRAM per GPU |
| `memory_in_gb` | System RAM |
| `vcpus` | vCPU count |
| `storage_in_gb` | Attached storage |
| `os_options` | Supported OS images |

### Example

```bash
curl "https://api.inference.sh/instances/types?gpu_type=H100&available=true"
```

```bash
curl "https://api.inference.sh/instances/types?cloud=runpod&num_gpus=1"
```

---

## Instance type price history

`GET /instances/types/price-history`

Returns one data point per calendar day (UTC) for a GPU configuration, derived from daily catalog snapshots. Use this to chart how listed and in-stock prices change over time for a given `gpu_type` and `num_gpus`.

No API key is required. Responses are cached for one hour (`Cache-Control: public, max-age=3600`).

### Query parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `gpu_type` | string | **Required.** GPU model name (for example `H100`, `A100`) |
| `num_gpus` | integer | GPU count; defaults to `1` |
| `days` | integer | Number of days to include, counting back from today (UTC); defaults to `90`, maximum `365` |

### Response

The body is a JSON array of daily points under `data`, oldest day first.

```json
[
  {
    "day": "2026-10-01",
    "on_demand": 230,
    "on_demand_in_stock": 250,
    "spot": 120,
    "spot_in_stock": 120,
    "providers": 2,
    "regions": 2
  },
  {
    "day": "2026-10-02",
    "on_demand": 240,
    "providers": 1,
    "regions": 0
  }
]
```

### Fields

| Field | Description |
|-------|-------------|
| `day` | Calendar date in `YYYY-MM-DD` (UTC) |
| `on_demand` | Cheapest **listed** on-demand hourly price that day, in **cents** (in stock or not) |
| `spot` | Cheapest **listed** spot hourly price that day, in **cents**; omitted when no spot listing existed |
| `on_demand_in_stock` | Cheapest on-demand price among listings that had stock that day; omitted when none had stock |
| `spot_in_stock` | Cheapest spot price among listings that had stock that day; omitted when none had stock |
| `providers` | Number of distinct cloud providers with a listing that day (on-demand and spot counts are merged; the larger value wins when both exist) |
| `regions` | Total count of provider regions with **on-demand** stock that day (summed across providers) |

Listed catalog prices are stable day to day; in-stock prices and `regions` move as availability changes. All prices are in cents per hour (divide by 100 for USD).

### Errors

| Status | When |
|--------|------|
| `400` | `gpu_type` is missing |

### Example

```bash
curl "https://api.inference.sh/instances/types/price-history?gpu_type=H100&num_gpus=1&days=30"
```

---

## Authenticated catalog (workspace)

When provisioning remote engines in the workspace, the authenticated endpoint `GET /engines/types` (requires `engines:read` scope) returns a **deduplicated** catalog: one cheapest option per GPU type, GPU count and rental type for engine setup flows. Each entry has a `rental_type`, and its `region` and `hourly_price` are for that rental type. Spot options are listed only while in stock. CPU-only types get one entry per shape (vCPUs and RAM). Each entry also has `options`: every in-stock provider for it, cheapest first, with its `configuration` and in-stock `regions` (each with its own `hourly_price` in cents; spot prices can differ by region). Launch with an option's `cloud` and `shade_instance_type`, one of its regions, and the entry's `rental_type`. Pass the entry's `rental_type` when creating the engine; the price is set by the server from the live catalog. A reclaimed spot engine stops with reason `preempted` and unused time is refunded. Details: [Engines API — List engine instance types](/docs/api/rest/engines#list-engine-instance-types).

Use `GET /instances/types` for the full public catalog with filters; use `GET /engines/types` inside authenticated integrations tied to engine provisioning.

---

## Related

→ [Workers concept](/docs/concepts/workers) — cloud vs private workers for running apps  
→ [Private engine configuration](/docs/private/config) — GPU workers on your own hardware  
→ [REST overview](/docs/api/rest/overview) — base URL and authentication
