# GET /api/v1/hosts/machines/{id}

Machine detail: compatibility findings, current offer/job, observed metrics, drain state (host owner/admin)

Operation: `getMachine`.

Machine detail: compatibility findings, current offer/job, observed metrics, drain state (host owner/admin)

Includes `telemetry`: the latest agent-reported sample plus `observed_at`, `age_s` and `boot_id`, or null when nothing was ever reported. Telemetry is evidence only and never influences admission, qualification, billing or job state. A measurement the host could not take is ABSENT from the object — it is never rendered as 0 and never carried over from an earlier sample, so a consumer must age it via `age_s` and show `unknown` when stale.

## Endpoint

`GET https://amplerun-api.spiry.org/api/v1/hosts/machines/{id}`

## Authentication

Use the credential and scope required by this operation. For programmatic renter/host calls: `Authorization: Bearer $AMPLERUN_API_KEY`. A host-agent signature or other specialized proof is required where the description specifies it.

## Parameters

| Name | Location | Presence | Type | Description |
| --- | --- | --- | --- | --- |
| `id` | path | Required | UUID |  |

## Responses

### `200`

Machine detail.

`application/json`
| Field | Type | Presence | Description |
| --- | --- | --- | --- |
| `accepts_custom_images` | boolean | Optional | The host's opt-in to renter-supplied public images on this machine (default false). |
| `tier` | "container" / "inference" | Optional | Tier A (renter containers) or Tier B (managed inference), set at enrollment. |
| `host_mode` | object | Optional | D-22 host mode as the last heartbeat reported it; null until one does. |
| `kernel_driver_runtime` | string | Optional | Kernel/driver/runtime triple from the manifest, e.g. linux-6.8/nvidia-560.35/cuda-12.6. |
| `recent_jobs` | array of object | Optional | The machine's latest 20 rentals, newest first. ended_at is null while a rental is open. |
| `listing_blockers` | array of string | Optional |  |
| `market_price` | object | Optional | D-35 suggested listing price: the market price a renter pays for ONE of this GPU for one hour. basis amplerun = AmpleRun's own listed offers of this model (at least 3); otherwise basis reference = a hand-curated table of official public list prices, each with its page and the date it was read (upper side, p75); otherwise basis throughput = each reference row of the same class (consumer or datacenter) turned into the price giving this GPU the same tokens per dollar, from memory bandwidth (LLM token generation is memory-bound), and the p75 of those. Renters pay the listed price (the 10% commission comes out of it), so the suggestion is the market price itself. null when neither exists. A suggestion only: the host sets its own price. |
| `auto_qualify` | object | Optional | The automatic machine test: the worker queues it while the agent heartbeats, retries failures with backoff, and admits a passed machine with a listed offer. reason is set for retrying and needs_attention. |
| `telemetry` | schema | Optional |  |

```json
{
  "type": "object",
  "properties": {
    "accepts_custom_images": {
      "type": "boolean",
      "description": "The host's opt-in to renter-supplied public images on this machine (default false)."
    },
    "tier": {
      "type": "string",
      "enum": [
        "container",
        "inference"
      ],
      "description": "Tier A (renter containers) or Tier B (managed inference), set at enrollment."
    },
    "host_mode": {
      "nullable": true,
      "description": "D-22 host mode as the last heartbeat reported it; null until one does.",
      "type": "object",
      "properties": {
        "mode": {
          "type": "string",
          "nullable": true,
          "enum": [
            "dedicated",
            "idle",
            "colisted"
          ]
        },
        "offerable": {
          "type": "boolean",
          "nullable": true
        },
        "reasons": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "observed_at": {
          "type": "string"
        }
      }
    },
    "kernel_driver_runtime": {
      "type": "string",
      "nullable": true,
      "description": "Kernel/driver/runtime triple from the manifest, e.g. linux-6.8/nvidia-560.35/cuda-12.6."
    },
    "recent_jobs": {
      "type": "array",
      "description": "The machine's latest 20 rentals, newest first. ended_at is null while a rental is open.",
      "items": {
        "type": "object",
        "required": [
          "job_id",
          "state",
          "started_at",
          "ended_at",
          "rate_micro_per_hour"
        ],
        "properties": {
          "job_id": {
            "$ref": "#/components/schemas/UUID"
          },
          "state": {
            "type": "string"
          },
          "started_at": {
            "$ref": "#/components/schemas/Rfc3339Utc"
          },
          "ended_at": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Rfc3339Utc"
              }
            ],
            "nullable": true
          },
          "rate_micro_per_hour": {
            "type": "string"
          },
          "ready": {
            "type": "boolean",
            "description": "False when the host never reached READY (a refused START): nothing ran and nothing was billed."
          },
          "billed_ms": {
            "type": "string",
            "description": "Metered (billed) runtime in ms, from READY."
          },
          "earned_micro": {
            "type": "string",
            "description": "The host's posted share for this rental, micro-USD."
          }
        }
      }
    },
    "listing_blockers": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "market_price": {
      "nullable": true,
      "type": "object",
      "description": "D-35 suggested listing price: the market price a renter pays for ONE of this GPU for one hour. basis amplerun = AmpleRun's own listed offers of this model (at least 3); otherwise basis reference = a hand-curated table of official public list prices, each with its page and the date it was read (upper side, p75); otherwise basis throughput = each reference row of the same class (consumer or datacenter) turned into the price giving this GPU the same tokens per dollar, from memory bandwidth (LLM token generation is memory-bound), and the p75 of those. Renters pay the listed price (the 10% commission comes out of it), so the suggestion is the market price itself. null when neither exists. A suggestion only: the host sets its own price.",
      "required": [
        "gpu_model",
        "basis",
        "median_micro_per_gpu_hour",
        "sample_size",
        "sources"
      ],
      "properties": {
        "gpu_model": {
          "type": "string",
          "description": "Canonical GPU name the prices were matched to."
        },
        "basis": {
          "enum": [
            "amplerun",
            "reference",
            "throughput"
          ]
        },
        "median_micro_per_gpu_hour": {
          "type": "string",
          "description": "Decimal string, micro-USD per GPU per hour."
        },
        "sample_size": {
          "type": "integer",
          "description": "Listings or reference prices behind the median."
        },
        "sources": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "label",
              "url",
              "accessed"
            ],
            "properties": {
              "label": {
                "type": "string"
              },
              "url": {
                "type": "string",
                "description": "Page where the price can be checked."
              },
              "accessed": {
                "type": "string",
                "description": "YYYY-MM-DD the price was read."
              }
            }
          }
        },
        "estimate": {
          "nullable": true,
          "type": "object",
          "description": "ESTIMATED from memory bandwidth, not measured on this machine. null when the GPU's bandwidth is unknown.",
          "required": [
            "tok_s_8b",
            "micro_per_million_tokens",
            "fits_up_to_b_params"
          ],
          "properties": {
            "tok_s_8b": {
              "type": "number",
              "description": "Estimated generation speed on an 8B Q4_K_M model, tokens/s."
            },
            "micro_per_million_tokens": {
              "type": "string",
              "description": "The per-GPU-hour price per 1M generated tokens at that speed, micro-USD."
            },
            "fits_up_to_b_params": {
              "type": "integer",
              "description": "Largest model that fits, billions of parameters at Q4."
            }
          }
        }
      }
    },
    "auto_qualify": {
      "type": "object",
      "description": "The automatic machine test: the worker queues it while the agent heartbeats, retries failures with backoff, and admits a passed machine with a listed offer. reason is set for retrying and needs_attention.",
      "required": [
        "state",
        "reason"
      ],
      "properties": {
        "state": {
          "type": "string",
          "enum": [
            "testing",
            "passed",
            "retrying",
            "needs_attention",
            "waiting"
          ]
        },
        "reason": {
          "type": "string",
          "nullable": true
        }
      }
    },
    "telemetry": {
      "nullable": true,
      "allOf": [
        {
          "$ref": "#/components/schemas/TelemetrySample"
        },
        {
          "type": "object",
          "required": [
            "observed_at",
            "age_s",
            "boot_id"
          ],
          "properties": {
            "observed_at": {
              "$ref": "#/components/schemas/Rfc3339Utc"
            },
            "age_s": {
              "type": "integer",
              "minimum": 0
            },
            "boot_id": {
              "type": "string"
            }
          }
        }
      ]
    }
  }
}
```

### `default`

Error envelope. 401 unauthenticated, 403/404 forbidden, 409 conflict, 422 invalid input, 429 rate limited (code UNAVAILABLE, retryable:true, no Retry-After header), 503 unavailable money/provider state with retryable:true.

`application/json`
| Field | Type | Presence | Description |
| --- | --- | --- | --- |
| `error` | object | Required |  |

```json
{
  "$ref": "#/components/schemas/ErrorEnvelope"
}
```

## Static request outline

Replace path/query placeholders and provide the required JSON body, headers and credential from the sections above. This is a request outline, not a command that chooses an amount or starts a rental for you.

```sh
curl --request GET 'https://amplerun-api.spiry.org/api/v1/hosts/machines/{id}' \
  --header "Authorization: Bearer $AMPLERUN_API_KEY"
```

[Schema definitions](https://docs.amplerun.com/reference/schemas.md) · [Download OpenAPI](/openapi.json) · [Authentication](https://docs.amplerun.com/agents/authentication.md) · [Errors and recovery](https://docs.amplerun.com/reference/errors.md)

---
Generated from the AmpleRun API contract.
Canonical: https://docs.amplerun.com/reference/api/get-machine/
