---
title: "Get one offer (public)"
method: GET
path: "/api/v1/offers/{id}"
tags: ["catalog"]
---

# Get one offer (public)

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

## Request

- Base URL: `https://amplerun-api.spiry.org`
- URL: `https://amplerun-api.spiry.org/api/v1/offers/{id}`
- Auth: none declared

## Path parameters

- `id` string, uuid, required

## Response `200`

Offer summary.

- OfferSummary: No host management address is ever exposed. gpu_count, model and vram_bytes come from the machine manifest; vram_bytes is per GPU and is absent when the GPUs differ or memory was not measured. region, ram_bytes and disk_bytes are absent when the host did not measure them, never 0.
  - `offer_id` string, uuid, required
  - `machine_id` string, uuid, required
  - `observed_at` string, date-time, required
  - `offer_version` string, required: Unsigned base-10 integer as string; never a float.
  - `expected_version` string, required: Unsigned base-10 integer as string; never a float.
  - `readiness` 'ready' | 'provisioning' | 'unavailable', required
  - `total_rate_micro_per_hour` string, required: Unsigned base-10 integer as string; never a float.
  - `included_quotas` object, required
    - `included_disk_gib` integer, required
    - `included_egress_gib` integer, required
  - `available_from` string, date-time, required
  - `available_until` string, date-time, required
  - `maintenance_windows` object[], required
    - `starts_at` string, date-time, required
    - `ends_at` string, date-time, required
    - `reason` string, required
  - `gpu_count` integer
  - `model` string
  - `vram_bytes` string: Unsigned base-10 integer as string; never a float.
  - `region` string
  - `country` string: 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` 'AF' | 'AN' | 'AS' | 'EU' | 'NA' | 'OC' | 'SA': Additive. Continent derived from country: AF Africa, AN Antarctica, AS Asia, EU Europe, NA North America, OC Oceania, SA South America. Absent when the country is unknown.
  - `ram_bytes` string: Unsigned base-10 integer as string; never a float.
  - `disk_bytes` string: Unsigned base-10 integer as string; never a float.
  - `measured_bandwidth_mbps` integer: netfacts lane. Measured DOWNLOAD rate in Mbps; additive. Absent = never measured (never 0).
  - `net_up_mbps` integer: netfacts lane. Measured UPLOAD rate in Mbps; rides the same measurement as measured_bandwidth_mbps.
  - `net_latency_ms` integer: netfacts lane. Median HTTPS latency in ms from the same measurement.
  - `speedtest_at` string, date-time
  - `tflops_bf16` number: 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: AI Speed. tflops_bf16 x gpu_count, computed, one decimal. Absent with tflops_bf16 or gpu_count.
  - `mem_bw_gbps` number: 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: AI Speed. round(100*sqrt((tflops_bf16/165.2)*(mem_bw_gbps/1008))); RTX 4090 = 100. Absent unless both figures were measured.
  - `bench_at` string, date-time
  - `bench_flag` 'unverified_spec': AI Speed. The GPU has no datasheet row to check the figures against.
  - `disk_free_bytes` string: Unsigned base-10 integer as string; never a float.
  - `uptime_s` string: Unsigned base-10 integer as string; never a float.
  - `gpu_utilization_pct` number: 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` string, date-time
  - `template_compatibility` string[]
  - `manifest_hash` string
  - `fit` TemplateFit: D-19(c) per-offer fit verdict for a template, computed server-side from vram_fit against measured device VRAM. reason is human-readable and non-empty when fits is false.
    - `fits` boolean, required
    - `reason` string, required
  - `fits_template_ids` UUID[]: 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: 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': Additive. How the machine's hardware claims were verified.
  - `admitted` boolean: 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': 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` string[]: Additive. Backends the machine's devices serve, in preference order (cuda > rocm > sycl > vulkan > metal). A template runs here with the first one it has a runtime for.
  - `reliability` object: Additive. Approximate reliability score from machine fields only (no per-job joins on the catalog path).
    - `score` number, required
    - `stars` string, required
    - `band` string, required
    - `approximate` boolean, required
  - `availability_class` 'dedicated' | 'interruptible': D-22. dedicated (the default) is never preempted. interruptible is sold only from idle or co-listed hosts: the host may take the machine back after preemption_notice_s seconds of notice, and billing stops at the notice.
  - `preemption_notice_s` integer, nullable: D-22. Notice in seconds (SIGTERM plus /work/.amplerun-preempt) before the host stops an interruptible rental; null for dedicated.
  - `interruption_estimate` InterruptionEstimate: D-22, interruptible offers only. Plain observed counts, never a prediction. A run is one continuous period in which the host reported the machine offerable (from heartbeats); it counts when it ended, or has already lasted horizon_h. uninterrupted is null below the sample gate (20 runs): not enough history.
    - `runs` integer, required: Most recent decided runs counted (at most 40).
    - `uninterrupted` integer, nullable, required: Of those runs, how many lasted horizon_h without interruption; null below the sample gate.
    - `horizon_h` integer, required
    - `computed_at` string, date-time, required
    - `summary` string, required: The counts in words, e.g. "34 of the last 40 runs lasted 4 h without interruption" or "Not enough history (12 runs so far)".

## Other responses

- `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.

---

[API](https://skmtc.dev/amplerun/apis/amplerun-business-api.md) · [All operations](https://skmtc.dev/amplerun/apis/amplerun-business-api/llms.txt) · [OpenAPI document](https://skmtc.dev/amplerun/apis/amplerun-business-api/revisions/40944687fa52?raw)
