# GET /api/v1/offers/{id}

Get one offer (public)

Operation: `getOffer`.

Get one offer (public)



## Endpoint

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

## Authentication

No default Bearer requirement is declared for this operation. Read its description for wallet signatures, host enrollment or other specialized proofs.

## Parameters

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

## Responses

### `200`

Offer summary.

`application/json`
| Field | Type | Presence | Description |
| --- | --- | --- | --- |
| `offer_id` | UUID | Required |  |
| `machine_id` | UUID | Required |  |
| `observed_at` | Rfc3339Utc | Required |  |
| `offer_version` | DecimalString | Required |  |
| `expected_version` | DecimalString | Required |  |
| `readiness` | "ready" / "provisioning" / "unavailable" | Required |  |
| `total_rate_micro_per_hour` | MicroAmount | Required |  |
| `included_quotas` | object | Required |  |
| `available_from` | Rfc3339Utc | Required |  |
| `available_until` | Rfc3339Utc | Required |  |
| `maintenance_windows` | array of object | Required |  |
| `gpu_count` | integer | Optional |  |
| `model` | string | Optional |  |
| `vram_bytes` | DecimalString | Optional |  |
| `region` | string | Optional |  |
| `country` | string | Optional | Additive. ISO 3166-1 alpha-2 country of the machine, read by the controller from the agent's request country as reported by the trusted proxy (never from host input). Absent when unknown. |
| `continent` | Continent | Optional |  |
| `ram_bytes` | DecimalString | Optional |  |
| `disk_bytes` | DecimalString | Optional |  |
| `measured_bandwidth_mbps` | integer | Optional | netfacts lane. Measured DOWNLOAD rate in Mbps; additive. Absent = never measured (never 0). |
| `net_up_mbps` | integer | Optional | netfacts lane. Measured UPLOAD rate in Mbps; rides the same measurement as measured_bandwidth_mbps. |
| `net_latency_ms` | integer | Optional | netfacts lane. Median HTTPS latency in ms from the same measurement. |
| `speedtest_at` | Rfc3339Utc | Optional | netfacts lane. When the current net facts were measured; renders 'measured N ago' honestly. |
| `tflops_bf16` | number | Optional | AI Speed. Measured dense BF16 matmul TFLOPS per GPU (the MIN across the machine's GPUs); additive. Absent = never measured (never 0). |
| `tflops_total` | number | Optional | AI Speed. tflops_bf16 x gpu_count, computed, one decimal. Absent with tflops_bf16 or gpu_count. |
| `mem_bw_gbps` | number | Optional | AI Speed. Measured device memory bandwidth in GB/s per GPU (the MIN across the machine's GPUs). Absent = never measured (never 0). |
| `ai_speed` | integer | Optional | AI Speed. round(100*sqrt((tflops_bf16/165.2)*(mem_bw_gbps/1008))); RTX 4090 = 100. Absent unless both figures were measured. |
| `bench_at` | Rfc3339Utc | Optional | AI Speed. When the current figures were measured. |
| `bench_flag` | "unverified_spec" | Optional | AI Speed. The GPU has no datasheet row to check the figures against. |
| `disk_free_bytes` | DecimalString | Optional | Additive. Free disk space in bytes from the machine's latest telemetry sample. Absent when there is no sample, the sample is older than 60 seconds (2x the 30 s heartbeat, the host console STALE_AFTER_S rule) or the agent did not report it; never 0 as a stand-in. |
| `uptime_s` | DecimalString | Optional | Additive. Seconds since the machine booted, from the latest telemetry sample. Absent under the same rules as disk_free_bytes. |
| `gpu_utilization_pct` | number | Optional | Additive. Live GPU load, the PEAK across the machine's devices, from the latest telemetry sample. Absent under the same rules as disk_free_bytes, and when no device reported utilisation. 0 means measured idle. |
| `telemetry_at` | Rfc3339Utc | Optional | Additive. observed_at of the telemetry sample disk_free_bytes, uptime_s and gpu_utilization_pct came from. Present only with at least one of them; absent whenever they are. |
| `template_compatibility` | array of string | Optional |  |
| `manifest_hash` | Sha256Hash | Optional |  |
| `fit` | TemplateFit | Optional | D-19(c). Present only when the request carried template_id; computed server-side from the template vram_fit against measured device VRAM. |
| `fits_template_ids` | array of UUID | Optional | Additive. Present only when the request carried fits_for=all; the ids of every published template that fits this offer (the same rule as fit). |
| `platform_fee_bps` | integer | Optional | Additive. Platform fee frozen into this offer version, in basis points (500 = 5%), taken out of each charge. |
| `verification_level` | "unverified" / "auto_verified" / "manually_verified" | Optional | Additive. How the machine's hardware claims were verified. |
| `admitted` | boolean | Optional | Additive. Whether the machine has passed admission (a passed qualification for its current manifest). false is an unverified listing: shown in the catalog, never quoted or reserved (409 CONFLICT). |
| `tier` | "container" / "inference" | Optional | Additive (D-23). container: SSH containers under the launch profile. inference: managed models on a signed, hash-pinned runtime with no renter code, reached over the host's outbound session (community inference: don't send sensitive data). |
| `backends` | array of "cuda" / "rocm" / "sycl" / "vulkan" / "metal" | Optional | Additive. Backends the machine's devices serve, in preference order (cuda &gt; rocm &gt; sycl &gt; vulkan &gt; metal). A template runs here with the first one it has a runtime for. |
| `reliability` | object | Optional | Additive. Approximate reliability score from machine fields only (no per-job joins on the catalog path). |
| `availability_class` | AvailabilityClass | Optional |  |
| `preemption_notice_s` | integer or null | Optional | D-22. Notice in seconds (SIGTERM plus /work/.amplerun-preempt) before the host stops an interruptible rental; null for dedicated. |
| `interruption_estimate` | InterruptionEstimate or null | Optional | D-22. Present for interruptible offers (horizon 4 h in the catalog); null for dedicated. |

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

### `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/offers/{id}'
```

[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-offer/
