GET /api/v1/hosts/machines/{id}
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
Section titled “Endpoint”GET https://amplerun-api.spiry.org/api/v1/hosts/machines/{id}
Authentication
Section titled “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
Section titled “Parameters”| Name | Location | Presence | Type | Description |
|---|---|---|---|---|
id | path | Required | UUID |
Responses
Section titled “Responses”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 |
{ "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
Section titled “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 |
{ "$ref": "#/components/schemas/ErrorEnvelope"}Static request outline
Section titled “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.
curl --request GET 'https://amplerun-api.spiry.org/api/v1/hosts/machines/{id}' \ --header "Authorization: Bearer $AMPLERUN_API_KEY"Schema definitions · Download OpenAPI · Authentication · Errors and recovery
Official AmpleRun documentation · Contract v3 · Generated from the API contract · Revision 52fe29de · Open AmpleRun · View Markdown · For agents