{"openapi":"3.1.0","info":{"title":"Fluence GPU Public v3","description":"Rent GPU instances — containers, virtual machines and bare metal — from the Fluence catalog.\nProduction base URL: `https://api.fluence.dev`; every path below is absolute.\n\n## Access\n\nSend a Fluence API key in `X-API-KEY` or a session token as `Authorization: Bearer`.\nReads and quotes need `gpu:read`; creating, changing and deleting instances need `gpu:write`.\n`GET /v3/gpu/offers` and `GET /v3/gpu/offers/{id}` also answer without credentials: the same\nshape, remaining capacity included, with `Cache-Control: public, max-age=5`; a card of an\noffer outside the sellable snapshot answers `offer_not_found`.\n\n## Finding and pricing\n\nOffers are concrete sellable placements; offer groups and facets summarise the same catalog.\nPrices are full USD per instance-hour; a volume is paid apart, and an instance quote naming\nvolumes lists each volume's own hourly price in `volumes`. `POST /v3/gpu/instance-quotes` estimates\nwithout holding anything. Requirements name the GPU by `model`, as offers carry it; the offer\nfacets list the models on sale, and an unknown name is `invalid_input`. Not knowing the model,\nstart from `GET /v3/gpu/offer-picks` with the GPU memory the task needs: it returns the cheapest\noffers with requirements ready for the quote and creation. An Akash offer of kind `market_profile` fixes the hardware profile and the bid ceiling,\nnot the host: the host is chosen from bids at creation.\n\n## Creating\n\n`POST /v3/gpu/instances` requires an `Idempotency-Key` header. The same key with the same body\nreturns the same instance (200) instead of creating another; the same key with another body is\nrefused with `idempotency_key_reused`; while the first request is still running the answer is\n`request_in_progress` with `Retry-After`. After an unknown outcome, read\n`GET /v3/gpu/instances/by-idempotency-key` with the same header before deciding to POST again.\n\n## Instance lifecycle\n\n`status` moves `pending` (awaiting the account reservation) → `provisioning` (the provider is\ncreating it) → `running`; `updating` while a container change is applied, `terminating` while it is\nclosed at the provider, then `ended`. `failed` means the instance was never created or did not\nsurvive creation: `statusDetail` and `failure` say why, and a refused reservation is also returned by\nthe creating POST as its error. `ended` and `failed` are terminal (`isTerminal: true`): the provider\nresource is gone and billing has stopped, yet the instance stays readable by id and in lists\nforever. A client that manages instances declaratively treats a terminal instance as deleted.\n\nOnly `name` and the container's `image`, `environment`, `startupCommand` and\n`registryCredentials` change in place. Requirements, placement and price, the workload kind,\nports (`expose`), and the operating system and SSH key of a VM or bare metal machine are fixed at\ncreation; changing them means creating a new instance and deleting the old one.\n\n`PATCH` renames at once until the instance starts terminating. A container change needs a running instance\nwhose placement supports updates; it answers 200 with `status: updating` and the instance returns\nto `running` once the provider applies it. Repeating the same container change while it is applied\nanswers 200 with the current instance; a different one is refused with `update_in_progress`.\n\n`DELETE` answers 202 when it starts closing the instance and 200 when the instance is already\nclosing or terminal, so it is safe to repeat.\n\nLogs and events are read from an instance whose placement declares them in\n`placement.capabilities`, while the provider holds something to read: when it is running, and on\nsome providers already while it is provisioning, so a workload that does not start shows why.\nThe instance's `actions` list `logs` and `events` exactly when the call answers; otherwise the\nanswer is `unsupported_by_provider` or `instance_state_conflict`. `tail` asks for the last lines;\nthere is no start moment, and the provider may return fewer lines.\n\n## Volumes\n\nA volume is block storage at one provider region that outlives instances, billed by its size\nfrom the moment it is ready until it is deleted, with or without an instance. Its offers are at\n`GET /v3/gpu/volume-offers`; the list is empty while volume sales are closed. `POST /v3/gpu/volumes`\ntakes an `Idempotency-Key` under the same rules as instances; a key's volume and instance are\ndifferent resources with different ids. `status` moves `pending` → `creating` → `available`;\n`deleting` → `deleted` after `DELETE`, which is refused with `volume_state_conflict` while the\nvolume is still being created. `failed` and `deleted` are terminal and stay readable;\n`statusDetail.code` says why. Only `name` changes; the size never does. The service never formats\na volume. `POST /v3/gpu/volume-quotes` prices a volume of an offer and size — hourly, per step and\nthe minimum charge reserved at creation — without holding anything; creation may still refuse an\noffer the provider's balance cannot carry at that size.\n\n## Errors and pages\n\nEvery refusal is `{code, error, details}` with a stable `code`; the list of codes is on\n`ErrorBody.code`. A field detail carries `location` and, for the body, an RFC 6901 `pointer` to\nthe field. `Retry-After` comes only with retryable refusals. Lists take `page` and `perPage` (at\nmost 200) and answer `{items, pagination}`.\n\nEvery response carries `X-Request-Id`. A client may send its own (1–64 ASCII letters, digits and\n`-`, one header): it is echoed and logged with the request; otherwise the service makes one.\nQuote it when reporting a problem.\n","license":{"name":""},"version":"3"},"paths":{"/v3/gpu/default-images":{"get":{"tags":["Images"],"summary":"List GPU container image presets","description":"Suggested container images for the configurator. Creation is not limited to them: any image that passes the container checks is accepted. Call it before quoting a container: copy a preset's image, expose, environment and startupCommand into container; requiresSshKey asks for container.sshKey, and sshUser is the user the instance's connection.sshCommand logs in as.","operationId":"listGpuDefaultImages","parameters":[{"name":"page","in":"query","description":"Page number from 1; pagination.totalPages in the answer says how many there are.","required":false,"schema":{"type":"integer","format":"int64","default":1,"maximum":9007199254740991,"minimum":1}},{"name":"perPage","in":"query","description":"Items per page, 1 to 200; 50 when absent.","required":false,"schema":{"type":"integer","format":"int64","default":50,"maximum":200,"minimum":1}}],"responses":{"200":{"description":"Container image presets","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Paginated_DefaultImage"}}}},"400":{"description":"Invalid pagination","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"The gpu:read permission is required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"Authentication service temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v3/gpu/instance-quotes":{"post":{"tags":["Quotes"],"summary":"Estimate an instance price","description":"Finds the offer that creation would select for these requirements and workload, up to three alternatives, and why the remaining offers were rejected. The estimate holds nothing and can change before creation; it writes nothing and is safe to repeat. Call it before createGpuInstance with the same requirements and workload: it checks the image, ports and environment and shows the price (match.price.perHour and minimumCharge, what creating it costs at least). Next: createGpuInstance with this body plus a name.","operationId":"quoteGpuInstance","requestBody":{"description":"requirements plus exactly one container {image, startupCommand, environment: [{name, value, secret}], expose: [{port, protocol}], registryHost}, vm {osImage}, or baremetal {osImage}. Container strings use the same checks as creation; environment is optional and secret defaults to false. Quotes validate values without storing them. maxPricePerHour is optional for estimates. rentalType defaults to on_demand; spot requires an explicit selection. An offerId with another rental type returns 422 rental_type_mismatch. Spot candidates expose preemption; data does not survive and there is no automatic restart. No reservation or validity period is promised. A named volume that no offer can take, such as one attached to a live instance, answers with no match and only that volume's reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"}}},"required":true},"responses":{"200":{"description":"Non-binding estimate in USD per instance-hour; no resources held","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteResponse"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"volume_not_found: a volume in requirements.volumes is not the caller's.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"rental_type_not_available, region_ambiguous, workload_mismatch.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v3/gpu/offers":{"get":{"tags":["Offers"],"summary":"List GPU offers","description":"Concrete sellable placements with full price, hardware, availability and capabilities. An offer id can be pinned in creation requirements. Callable without credentials: an anonymous answer is shareable cache for the catalog's five-second freshness, and always lists sellable offers only — available=false is ignored. Call it to compare concrete placements; to rent by GPU memory, pickGpuOffers gives the cheapest with ready requirements. Next: quoteGpuInstance with requirements.offerId set to the chosen id, its workload and its gpu vendor, model and count.","operationId":"listGpuOffers","parameters":[{"name":"page","in":"query","description":"Page number from 1; pagination.totalPages in the answer says how many there are.","required":false,"schema":{"type":"integer","format":"int64","default":1,"maximum":9007199254740991,"minimum":1}},{"name":"perPage","in":"query","description":"Items per page, 1 to 200; 50 when absent.","required":false,"schema":{"type":"integer","format":"int64","default":50,"maximum":200,"minimum":1}},{"name":"workload","in":"query","description":"One of container, vm, baremetal.","required":false,"schema":{"type":"string"}},{"name":"rentalType","in":"query","description":"on_demand (default) or spot; spot instances can be preempted by the provider.","required":false,"schema":{"type":"string"}},{"name":"gpuVendor","in":"query","description":"GPU vendor as offers name it, e.g. nvidia; case-insensitive.","required":false,"schema":{"type":"string"}},{"name":"gpuModel","in":"query","description":"GPU model as offers name it (gpu.model), e.g. h100 or rtx4090; the offer facets list the\nmodels on sale; case-insensitive.","required":false,"schema":{"type":"string"}},{"name":"gpuVramGib","in":"query","description":"Exact GPU memory per card, GiB.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"minGpuVramGib","in":"query","description":"At least this much GPU memory per card, GiB.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"gpuInterface","in":"query","description":"GPU interface as offers name it, e.g. pcie or sxm; case-insensitive.","required":false,"schema":{"type":"string"}},{"name":"gpuCount","in":"query","description":"Exact number of GPUs per machine.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"minGpuCount","in":"query","description":"At least this many GPUs per machine.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"nodes","in":"query","description":"Machines per instance; 1 lists single machines, 2 or more clusters of that size.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"minVcpu","in":"query","description":"At least this many vCPUs per machine.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"minMemoryGib","in":"query","description":"At least this much memory per machine, GiB.","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"minStorageGib","in":"query","description":"At least this much local storage per machine, GiB.","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"country","in":"query","description":"Two-letter ISO country code, e.g. US.","required":false,"schema":{"type":"string"}},{"name":"provider","in":"query","description":"Provider name, or several separated by commas, e.g. akash,lium.","required":false,"schema":{"type":"string"}},{"name":"regionLabel","in":"query","description":"Region label exactly as offers show it (region.label).","required":false,"schema":{"type":"string"}},{"name":"hostTier","in":"query","description":"One of dedicated, shared, unknown (offers whose tier is not known).","required":false,"schema":{"type":"string"}},{"name":"cpuArchitecture","in":"query","description":"One of x86_64, arm64, unknown (offers whose architecture is not known).","required":false,"schema":{"type":"string"}},{"name":"maxPricePerHour","in":"query","description":"Highest full USD price per instance-hour, as a decimal string, e.g. 0.50.","required":false,"schema":{"type":"string"}},{"name":"available","in":"query","description":"true (default): only offers on sale with capacity left; false: sold-out offers too.\nAnonymous callers always see offers on sale only.","required":false,"schema":{"type":"boolean"}},{"name":"q","in":"query","description":"Text found in the GPU vendor, GPU model, provider or region label; case-insensitive.","required":false,"schema":{"type":"string"}},{"name":"sort","in":"query","description":"One of price, vram, vcpu, memory, storage, availability; without it, cheapest first.","required":false,"schema":{"type":"string"}},{"name":"order","in":"query","description":"asc (default) or desc.","required":false,"schema":{"type":"string"}},{"name":"volumeId","in":"query","description":"Only offers this ready volume of the caller can be attached to; not with volumeOfferId.","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"volumeOfferId","in":"query","description":"Only offers a volume of this volume offer would attach to; not with volumeId.","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Sellable GPU offers; prices are full USD per instance-hour","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Paginated_OfferView"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"volume_not_found: volumeId is not a volume of the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"volume_offer_unavailable: volumeOfferId is not a volume offer on sale.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"Rental type not available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"Authentication service temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{},{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v3/gpu/offers/{id}":{"get":{"tags":["Offers"],"summary":"Get a GPU offer","description":"One offer by id, including a sold-out one; an unknown id answers 404 offer_not_found. Without credentials the card comes from the shared sellable snapshot: a withdrawn, excluded or sold-out offer is absent there and answers 404 offer_not_found. Call it to re-read one offer's price and availability before quoting or creating with its id.","operationId":"getGpuOffer","parameters":[{"name":"id","in":"path","description":"Offer id from listGpuOffers or pickGpuOffers.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Offer, including sold-out offers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferView"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Offer not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"Authentication service temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{},{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v3/gpu/offer-groups":{"get":{"tags":["Offers"],"summary":"List GPU offer groups","description":"Offers grouped by GPU configuration, each with the price creation would select under the applied filters. Call it to compare GPU models and their from-prices; a group's requirements go to quoteGpuInstance as they are, and to creation with a maxPricePerHour or with offerId set to cheapestOfferId. To rent by GPU memory, pickGpuOffers answers in one call.","operationId":"listGpuOfferGroups","parameters":[{"name":"page","in":"query","description":"Page number from 1; pagination.totalPages in the answer says how many there are.","required":false,"schema":{"type":"integer","format":"int64","default":1,"maximum":9007199254740991,"minimum":1}},{"name":"perPage","in":"query","description":"Items per page, 1 to 200; 50 when absent.","required":false,"schema":{"type":"integer","format":"int64","default":50,"maximum":200,"minimum":1}},{"name":"workload","in":"query","description":"One of container, vm, baremetal.","required":false,"schema":{"type":"string"}},{"name":"rentalType","in":"query","description":"on_demand (default) or spot; spot instances can be preempted by the provider.","required":false,"schema":{"type":"string"}},{"name":"gpuVendor","in":"query","description":"GPU vendor as offers name it, e.g. nvidia; case-insensitive.","required":false,"schema":{"type":"string"}},{"name":"gpuModel","in":"query","description":"GPU model as offers name it (gpu.model), e.g. h100 or rtx4090; the offer facets list the\nmodels on sale; case-insensitive.","required":false,"schema":{"type":"string"}},{"name":"gpuVramGib","in":"query","description":"Exact GPU memory per card, GiB.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"minGpuVramGib","in":"query","description":"At least this much GPU memory per card, GiB.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"gpuInterface","in":"query","description":"GPU interface as offers name it, e.g. pcie or sxm; case-insensitive.","required":false,"schema":{"type":"string"}},{"name":"gpuCount","in":"query","description":"Exact number of GPUs per machine.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"minGpuCount","in":"query","description":"At least this many GPUs per machine.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"nodes","in":"query","description":"Machines per instance; 1 lists single machines, 2 or more clusters of that size.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"minVcpu","in":"query","description":"At least this many vCPUs per machine.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"minMemoryGib","in":"query","description":"At least this much memory per machine, GiB.","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"minStorageGib","in":"query","description":"At least this much local storage per machine, GiB.","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"country","in":"query","description":"Two-letter ISO country code, e.g. US.","required":false,"schema":{"type":"string"}},{"name":"provider","in":"query","description":"Provider name, or several separated by commas, e.g. akash,lium.","required":false,"schema":{"type":"string"}},{"name":"regionLabel","in":"query","description":"Region label exactly as offers show it (region.label).","required":false,"schema":{"type":"string"}},{"name":"hostTier","in":"query","description":"One of dedicated, shared, unknown (offers whose tier is not known).","required":false,"schema":{"type":"string"}},{"name":"cpuArchitecture","in":"query","description":"One of x86_64, arm64, unknown (offers whose architecture is not known).","required":false,"schema":{"type":"string"}},{"name":"maxPricePerHour","in":"query","description":"Highest full USD price per instance-hour, as a decimal string, e.g. 0.50.","required":false,"schema":{"type":"string"}},{"name":"available","in":"query","description":"true (default): only offers on sale with capacity left; false: sold-out offers too.\nAnonymous callers always see offers on sale only.","required":false,"schema":{"type":"boolean"}},{"name":"q","in":"query","description":"Text found in the GPU vendor, GPU model, provider or region label; case-insensitive.","required":false,"schema":{"type":"string"}},{"name":"sort","in":"query","description":"One of price, vram, vcpu, memory, storage, availability; without it, cheapest first.","required":false,"schema":{"type":"string"}},{"name":"order","in":"query","description":"asc (default) or desc.","required":false,"schema":{"type":"string"}},{"name":"volumeId","in":"query","description":"Only offers this ready volume of the caller can be attached to; not with volumeOfferId.","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"volumeOfferId","in":"query","description":"Only offers a volume of this volume offer would attach to; not with volumeId.","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"GPU groups; from price follows the creation selector and applied filters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Paginated_GroupView"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"volume_not_found: volumeId is not a volume of the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"volume_offer_unavailable: volumeOfferId is not a volume offer on sale.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"rental_type_not_available.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v3/gpu/offer-facets":{"get":{"tags":["Offers"],"summary":"Get GPU catalog facets","description":"Values and counts for catalog filters; each facet ignores its own filter so that alternatives stay visible. Call it for the valid values before filtering or naming them in requirements: gpuModels lists vendor and model exactly as requirements.gpu accepts them (e.g. nvidia, rtx4090), with memory, count and from-price; countries, providers and regions likewise.","operationId":"getGpuOfferFacets","parameters":[{"name":"workload","in":"query","description":"One of container, vm, baremetal.","required":false,"schema":{"type":"string"}},{"name":"rentalType","in":"query","description":"on_demand (default) or spot; spot instances can be preempted by the provider.","required":false,"schema":{"type":"string"}},{"name":"gpuVendor","in":"query","description":"GPU vendor as offers name it, e.g. nvidia; case-insensitive.","required":false,"schema":{"type":"string"}},{"name":"gpuModel","in":"query","description":"GPU model as offers name it (gpu.model), e.g. h100 or rtx4090; the offer facets list the\nmodels on sale; case-insensitive.","required":false,"schema":{"type":"string"}},{"name":"gpuVramGib","in":"query","description":"Exact GPU memory per card, GiB.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"minGpuVramGib","in":"query","description":"At least this much GPU memory per card, GiB.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"gpuInterface","in":"query","description":"GPU interface as offers name it, e.g. pcie or sxm; case-insensitive.","required":false,"schema":{"type":"string"}},{"name":"gpuCount","in":"query","description":"Exact number of GPUs per machine.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"minGpuCount","in":"query","description":"At least this many GPUs per machine.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"nodes","in":"query","description":"Machines per instance; 1 lists single machines, 2 or more clusters of that size.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"minVcpu","in":"query","description":"At least this many vCPUs per machine.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"minMemoryGib","in":"query","description":"At least this much memory per machine, GiB.","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"minStorageGib","in":"query","description":"At least this much local storage per machine, GiB.","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"country","in":"query","description":"Two-letter ISO country code, e.g. US.","required":false,"schema":{"type":"string"}},{"name":"provider","in":"query","description":"Provider name, or several separated by commas, e.g. akash,lium.","required":false,"schema":{"type":"string"}},{"name":"regionLabel","in":"query","description":"Region label exactly as offers show it (region.label).","required":false,"schema":{"type":"string"}},{"name":"hostTier","in":"query","description":"One of dedicated, shared, unknown (offers whose tier is not known).","required":false,"schema":{"type":"string"}},{"name":"cpuArchitecture","in":"query","description":"One of x86_64, arm64, unknown (offers whose architecture is not known).","required":false,"schema":{"type":"string"}},{"name":"maxPricePerHour","in":"query","description":"Highest full USD price per instance-hour, as a decimal string, e.g. 0.50.","required":false,"schema":{"type":"string"}},{"name":"available","in":"query","description":"true (default): only offers on sale with capacity left; false: sold-out offers too.\nAnonymous callers always see offers on sale only.","required":false,"schema":{"type":"boolean"}},{"name":"q","in":"query","description":"Text found in the GPU vendor, GPU model, provider or region label; case-insensitive.","required":false,"schema":{"type":"string"}},{"name":"sort","in":"query","description":"One of price, vram, vcpu, memory, storage, availability; without it, cheapest first.","required":false,"schema":{"type":"string"}},{"name":"order","in":"query","description":"asc (default) or desc.","required":false,"schema":{"type":"string"}},{"name":"volumeId","in":"query","description":"Only offers this ready volume of the caller can be attached to; not with volumeOfferId.","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"volumeOfferId","in":"query","description":"Only offers a volume of this volume offer would attach to; not with volumeId.","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Disjunctive GPU catalog facets; each ignores its own filter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Facets"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"volume_not_found: volumeId is not a volume of the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"volume_offer_unavailable: volumeOfferId is not a volume offer on sale.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"rental_type_not_available.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v3/gpu/offer-picks":{"get":{"tags":["Offers"],"summary":"Pick the cheapest offers by GPU memory","description":"The cheapest offers on sale whose GPUs hold at least minVramGib each, in the order creation selects, each with ready requirements naming the exact model and offer id: pass them to the quote and to creation as they are. The workload itself (image, ports and their protocols) is checked by the quote, not here. Nothing is held; prices can change before creation. With no offer, rejected says why the others did not fit and largestOnSale names the most GPU memory and GPUs on sale. Start here when a task names GPU memory rather than a model. Next: quoteGpuInstance with an item's requirements and the workload, then createGpuInstance with the same requirements.","operationId":"pickGpuOffers","parameters":[{"name":"workload","in":"query","description":"One of container, vm, baremetal.","required":true,"schema":{"type":"string"}},{"name":"minVramGib","in":"query","description":"At least this much GPU memory per card, GiB, 1 or more; 1 takes any GPU, cheapest first.","required":true,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"gpuCount","in":"query","description":"GPUs per machine; 1 when absent.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"rentalType","in":"query","description":"on_demand (default) or spot; spot instances can be preempted by the provider.","required":false,"schema":{"type":"string"}},{"name":"maxPricePerHour","in":"query","description":"Highest full USD price per instance-hour, as a decimal string, e.g. 0.50.","required":false,"schema":{"type":"string"}},{"name":"country","in":"query","description":"Two-letter ISO country code, e.g. US.","required":false,"schema":{"type":"string"}},{"name":"minVcpu","in":"query","description":"At least this many vCPUs per machine.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"minMemoryGib","in":"query","description":"At least this much memory per machine, GiB.","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"minStorageGib","in":"query","description":"At least this much local storage per machine, GiB.","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"limit","in":"query","description":"How many offers to return, 1 to 10; 3 when absent.","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferPicks"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v3/gpu/instances":{"get":{"tags":["Instances"],"summary":"List instances","description":"Every instance of the caller in any status, including failed creations and ended instances. Call it to find an instance id; live=true lists the ones not yet ended or failed, which may still be billing.","operationId":"listGpuInstances","parameters":[{"name":"page","in":"query","description":"Page number from 1; pagination.totalPages in the answer says how many there are.","required":false,"schema":{"type":"integer","format":"int64","default":1,"maximum":9007199254740991,"minimum":1}},{"name":"perPage","in":"query","description":"Items per page, 1 to 200; 50 when absent.","required":false,"schema":{"type":"integer","format":"int64","default":50,"maximum":200,"minimum":1}},{"name":"status","in":"query","description":"One or several of pending, provisioning, running, updating, terminating, ended, failed,\nseparated by commas.","required":false,"schema":{"type":"string"}},{"name":"workload","in":"query","description":"One of container, vm, baremetal.","required":false,"schema":{"type":"string"}},{"name":"provider","in":"query","description":"Provider name, or several separated by commas.","required":false,"schema":{"type":"string"}},{"name":"country","in":"query","description":"Two-letter ISO country code, e.g. US.","required":false,"schema":{"type":"string"}},{"name":"rentalType","in":"query","description":"One of on_demand, spot, reserved.","required":false,"schema":{"type":"string"}},{"name":"createdVia","in":"query","description":"One of v3, legacy (created through the prior /gpu API), unknown.","required":false,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Text found in the instance id, name or GPU model; case-insensitive.","required":false,"schema":{"type":"string"}},{"name":"live","in":"query","description":"true for instances not yet ended or failed, false for ended and failed ones.","required":false,"schema":{"type":"boolean"}},{"name":"sort","in":"query","description":"One of createdAt (default), name, status, pricePerHour, activatedAt.","required":false,"schema":{"type":"string"}},{"name":"order","in":"query","description":"desc (default) or asc.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"All owned instances, including creation refusals. List items omit charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Paginated_InstanceView"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]},"post":{"tags":["Instances"],"summary":"Create an instance","description":"Selects an offer and queues the account reservation and the creation at the provider: 201 with the new instance. The same Idempotency-Key and body return that instance with 200 instead of creating another; a refused reservation answers with its refusal code, and that refusal stays the answer of its Idempotency-Key even after the account changes: retry with a new key. Costs money once running: the instance is billed to the caller's Fluence balance while it runs, about the offer's minimumCharge or more; one that never reaches running, failed or deleted before, costs nothing. Call it after quoteGpuInstance with the same requirements and workload. Next: poll getGpuInstance until status is running, when connection says how to reach it, or failed, when failure says why; getGpuInstanceEvents shows progress while it provisions where actions list events.","operationId":"createGpuInstance","parameters":[{"name":"Idempotency-Key","in":"header","description":"Required, 1–128 ASCII letters, digits, '.', '_', ':', '-'. Repeat with the same key after an uncertain outcome.","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"name, requirements and exactly one container, vm or baremetal. maxPricePerHour is required without offerId. Prices are USD per instance-hour; placement is frozen once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceView"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceView"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"volume_not_found: a volume in requirements.volumes is not the caller's.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"request_in_progress (with Retry-After), idempotency_key_reused, no_offer_matches (details name why offers did not fit), fleet_too_large, insufficient_balance, postpay_unsupported, account_suspended, account_blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"rental_type_mismatch, rental_type_not_available, region_ambiguous, workload_mismatch.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v3/gpu/instances/{id}":{"get":{"tags":["Instances"],"summary":"Get an instance","description":"One instance of the caller, readable in every status, also after it ended or failed. isTerminal true means the provider resource is gone and billing has stopped. Poll it every few seconds after createGpuInstance while status is pending or provisioning: running brings connection (sshCommand, where it is set, is the ready login), failed brings failure. After deleteGpuInstance poll until isTerminal; With activatedAt null the cost is 0, final at once; otherwise charged.total reads 0 for a few minutes, then a sum greater than 0 and unchanged between two reads a minute apart is final; it is about price.minimumCharge or more and can differ from it by a cent of rounding.","operationId":"getGpuInstance","parameters":[{"name":"id","in":"path","description":"Instance id from createGpuInstance or listGpuInstances.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Owned instance including reservation refusals. charged is zero before activation; otherwise total USD charges rounded half to even at four decimal places. Results and billing failures are cached per instance for ten seconds; null when billing is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceView"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]},"delete":{"tags":["Instances"],"summary":"Delete an instance","description":"End an owned instance. A newly queued termination returns 202; terminal instances and repeats return their current DTO without a second closure. Call it when the work is done: billing stops once the instance ends, and its local disk and data are lost; it cannot be undone. Next: poll getGpuInstance until isTerminal is true; With activatedAt null the cost is 0, final at once; otherwise charged.total reads 0 for a few minutes, then a sum greater than 0 and unchanged between two reads a minute apart is final; it is about price.minimumCharge or more and can differ from it by a cent of rounding.","operationId":"deleteGpuInstance","parameters":[{"name":"id","in":"path","description":"Instance id from createGpuInstance or listGpuInstances.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceView"}}}},"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceView"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]},"patch":{"tags":["Instances"],"summary":"Rename an instance or change its container","description":"Not a step of renting: call it only to rename an instance or change the container of a running one. Rename an instance immediately until it starts terminating, including during an update. Container fields are partial and require a running placement with update support; the answer is 200 with status updating until the provider applies them. Repeating the same container change while it is applied returns the instance; another one is refused with update_in_progress. Ports are set at creation and cannot be patched. Registry passwords are write-only; omitted fields remain unchanged.","operationId":"updateGpuInstance","parameters":[{"name":"id","in":"path","description":"Instance id from createGpuInstance or listGpuInstances.","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstancePatch"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceView"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"update_in_progress, instance_state_conflict, unsupported_by_provider.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v3/gpu/instances/by-idempotency-key":{"get":{"tags":["Instances"],"summary":"Find an instance by its creation key","description":"Read an existing owned creation receipt without creating, reserving or calling a provider or billing. Returns the instance card, including refused creations. charged is zero before activation; otherwise only a fresh cached total, or null. A missing receipt returns 404 not_found; a concurrent uncommitted creation is not visible yet.","operationId":"getGpuInstanceByIdempotencyKey","parameters":[{"name":"Idempotency-Key","in":"header","description":"Required; same 1–128 ASCII letters, digits, '.', '_', ':', '-' as creation. Never put the key in the URL.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceView"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v3/gpu/instances/{id}/logs":{"get":{"tags":["Instances"],"summary":"Read instance logs","description":"Last lines of an instance's output where placement.capabilities.logs is true, while it is running and, on some providers, already while it is provisioning: the instance's actions list logs exactly when this answers. Otherwise 409 unsupported_by_provider, or 409 instance_state_conflict. tail asks for the last lines; there is no start moment and the provider may return fewer. Call it when a running container misbehaves or exits, or while it provisions longer than its offer's provisioning estimate.","operationId":"getGpuInstanceLogs","parameters":[{"name":"id","in":"path","description":"Instance id from createGpuInstance or listGpuInstances.","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"tail","in":"query","description":"How many last lines to return, 50 when absent, 0 for none; the service sets no upper\nbound. The provider may return fewer.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}}],"responses":{"200":{"description":"Output of a running instance where its placement supports logs: container output, or a VM's console log","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Lines"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"unsupported_by_provider, instance_state_conflict (nothing to read yet or any more).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v3/gpu/instances/{id}/events":{"get":{"tags":["Instances"],"summary":"Read instance events","description":"Recent provider events of an instance where placement.capabilities.events is true, while it is running and, on some providers, already while it is provisioning, so a workload that does not start shows why: the instance's actions list events exactly when this answers. Otherwise 409 unsupported_by_provider, or 409 instance_state_conflict. tail asks for the last lines; there is no start moment and the provider may return fewer. Call it while waiting on getGpuInstance, when the instance stays provisioning or a workload does not start.","operationId":"getGpuInstanceEvents","parameters":[{"name":"id","in":"path","description":"Instance id from createGpuInstance or listGpuInstances.","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"tail","in":"query","description":"How many last lines to return, 50 when absent, 0 for none; the service sets no upper\nbound. The provider may return fewer.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}}],"responses":{"200":{"description":"Events of a running instance where its placement supports events: container events, or a VM's provider history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Lines"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"unsupported_by_provider, instance_state_conflict (nothing to read yet or any more).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v3/gpu/volume-offers":{"get":{"tags":["Volumes"],"summary":"List volume offers","description":"Volumes on sale, each in one provider region: storage kind, size bounds, price per GiB-hour with the billing step and minimum, and the instances a volume of the offer attaches to, with fit — what it fits now. With a target every offer also carries targetFit, none is left out. Empty while volume sales are closed.","operationId":"listGpuVolumeOffers","parameters":[{"name":"targetOfferId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"targetWorkload","in":"query","description":"container, vm or baremetal, with targetRentalType.","required":false,"schema":{"type":"string"}},{"name":"targetRentalType","in":"query","description":"on_demand or spot, with targetWorkload.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VolumeOfferView"}}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"offer_not_found: targetOfferId is not an offer of the catalogue.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"x-internal":true}},"/v3/gpu/volume-quotes":{"post":{"tags":["Quotes"],"summary":"Estimate a volume price","description":"The hourly price, billing step and minimum charge a volume of this offer and size would be reserved with, by the same terms as its creation. Holds and writes nothing, safe to repeat; the price can change before creation.","operationId":"quoteGpuVolume","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteVolume"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeQuoteView"}}}},"400":{"description":"invalid_input: sizeGib below 1 or outside the offer's bounds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"volume_offer_unavailable: the offer is not on sale.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"x-internal":true}},"/v3/gpu/volumes":{"get":{"tags":["Volumes"],"summary":"List volumes","description":"Every volume of the caller in any status, newest first, including failed creations, volumes lost at their provider and deleted volumes. status takes a comma-separated list; q matches part of the name. List items omit charged. Each live volume carries fit — what it fits now; with a target every item also carries targetFit, none is left out.","operationId":"listGpuVolumes","parameters":[{"name":"page","in":"query","description":"Page number from 1; pagination.totalPages in the answer says how many there are.","required":false,"schema":{"type":"integer","format":"int64","default":1,"maximum":9007199254740991,"minimum":1}},{"name":"perPage","in":"query","description":"Items per page, 1 to 200; 50 when absent.","required":false,"schema":{"type":"integer","format":"int64","default":50,"maximum":200,"minimum":1}},{"name":"status","in":"query","description":"Comma-separated: pending, creating, available, attached, deleting, deleted, failed.","required":false,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Part of the name, any case.","required":false,"schema":{"type":"string"}},{"name":"targetOfferId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"targetWorkload","in":"query","description":"container, vm or baremetal, with targetRentalType.","required":false,"schema":{"type":"string"}},{"name":"targetRentalType","in":"query","description":"on_demand or spot, with targetWorkload.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Paginated_VolumeView"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"offer_not_found: targetOfferId is not an offer of the catalogue.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"x-internal":true},"post":{"tags":["Volumes"],"summary":"Create a volume","description":"Reserves the volume in the account and queues its creation at the provider of the offer: 201 with the new volume, pending until the provider has it ready. The same Idempotency-Key and body return that volume with 200; a key is the volume's own, apart from instances. A refused reservation answers with its refusal code and leaves nothing at the provider. A volume is billed by its size whether or not an instance uses it, until it is deleted.","operationId":"createGpuVolume","parameters":[{"name":"Idempotency-Key","in":"header","description":"Required, 1–128 ASCII letters, digits, '.', '_', ':', '-'. Repeat with the same key after an uncertain outcome.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVolume"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeView"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeView"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"x-internal":true}},"/v3/gpu/volumes/{id}":{"get":{"tags":["Volumes"],"summary":"Get a volume","description":"One volume of the caller, readable in every status, also after it was deleted or failed. charged is zero before the volume is ready; otherwise the cached total, or null.","operationId":"getGpuVolume","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeView"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"x-internal":true},"delete":{"tags":["Volumes"],"summary":"Delete a volume","description":"Deletes a volume no instance uses; its data is lost. A newly queued deletion returns 202 with status deleting; a volume already deleting or ended returns its card with 200. A volume still being created or attached, or one its provider holds in a state it cannot be deleted from, is refused with volume_state_conflict.","operationId":"deleteGpuVolume","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeView"}}}},"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeView"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"x-internal":true},"patch":{"tags":["Volumes"],"summary":"Rename a volume","description":"Renames a volume that has not ended; the name is the only field that changes.","operationId":"renameGpuVolume","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenameVolume"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeView"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"x-internal":true}},"/v3/gpu/volumes/by-idempotency-key":{"get":{"tags":["Volumes"],"summary":"Find a volume by its creation key","description":"Read an owned creation receipt without creating, reserving or calling a provider. A missing receipt returns 404 not_found; a concurrent uncommitted creation is not visible yet.","operationId":"getGpuVolumeByIdempotencyKey","parameters":[{"name":"Idempotency-Key","in":"header","description":"The key the volume was created with. Never put the key in the URL.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeView"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"x-internal":true}},"/v3/gpu/openapi.json":{"get":{"tags":["Spec"],"summary":"Get this OpenAPI document","operationId":"getGpuOpenApi","responses":{"200":{"description":"GPU Public v3 OpenAPI document"},"429":{"description":"rate_limited: the request exhausted its rate-limit bucket. Retry after the indicated delay.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until another request can be admitted."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Token capacity of the selected bucket."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Whole tokens remaining."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the selected bucket is full."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"example":{"code":"rate_limited","details":[],"error":"Too many requests. Try again later."}}}}},"x-internal":true}}},"components":{"schemas":{"Alternative":{"allOf":[{"$ref":"#/components/schemas/Candidate"},{"type":"object","required":["whyNotFirst"],"properties":{"whyNotFirst":{"type":"string","description":"What ranks the match ahead of this alternative: price, remaining or id. A value not\nlisted is newer than this document: show nothing."}}}]},"Availability":{"type":"object","required":["status","capacityKind","observedAt"],"properties":{"status":{"type":"string","description":"One of available, limited (two or fewer left), sold_out (none left: creation refuses it),\nunknown (a marketplace offer: providers bid at creation, so it can be bought, though a\nbid may not come); a value not listed is newer than this document."},"capacity":{"type":["integer","null"],"format":"int64","description":"Instances left; null where capacityKind is flag or market.","minimum":0},"capacityKind":{"$ref":"#/components/schemas/CapacityKind","description":"How the provider tells capacity: flag — only whether any is left; count — the exact number;\nestimate — the provider's own estimate; market — a marketplace that tells none."},"observedAt":{"type":"string","format":"date-time"},"lastOutOfStockAt":{"type":["string","null"],"format":"date-time","description":"When the provider last refused to create this offer for lack of capacity; null when it has\nnot recently, or an instance of the offer was created since. The offer stays on sale: this\nreports a recent refusal, it does not promise the next creation is refused."}}},"Body":{"type":"object","required":["name","requirements"],"properties":{"name":{"type":"string","description":"The instance's name in lists: lower-case letters, digits and '-'.","maxLength":25,"minLength":1,"pattern":"^[a-z0-9-]+$"},"requirements":{"$ref":"#/components/schemas/RequirementsInput"},"container":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Container"}]},"vm":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Machine"}]},"baremetal":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Machine"}]}},"additionalProperties":false},"Candidate":{"type":"object","required":["rentalType","offerId","offerKind","provider","region","origin","hardware","price","capabilities","availability"],"properties":{"rentalType":{"type":"string","description":"One of on_demand, spot; a value not listed is newer than this document."},"preemption":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PreemptionView"}]},"offerId":{"type":"string","format":"uuid"},"offerKind":{"type":"string"},"provider":{"type":"string"},"region":{"$ref":"#/components/schemas/Region"},"origin":{"$ref":"#/components/schemas/Origin"},"hardware":{"$ref":"#/components/schemas/Hardware"},"price":{"$ref":"#/components/schemas/Price"},"provisioning":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProvisioningView"}]},"capabilities":{"$ref":"#/components/schemas/Capabilities"},"availability":{"$ref":"#/components/schemas/Availability"}}},"Capabilities":{"type":"object","required":["logs","events","update","portProtocols","privateRegistry","environment","portRequired","volumes"],"properties":{"logs":{"type":"boolean"},"events":{"type":"boolean"},"update":{"type":"boolean"},"portProtocols":{"type":"array","items":{"type":"string"}},"privateRegistry":{"type":"boolean"},"environment":{"type":"boolean","description":"The container accepts its own environment variables; false for machines and for providers\nwithout them, where creation, quotes and PATCH refuse any variable but SSH_PUBKEY. A preset\ncarrying variables does not fit such an offer."},"portRequired":{"type":"boolean","description":"The provider runs a container only with at least one exposed port; creation and quotes\nwith an empty expose reject such an offer with port_required."},"volumes":{"type":"integer","format":"int32","description":"How many volumes one instance of this offer takes at creation; zero — none. Whether a\ngiven volume fits is the volumeId filter's answer.","minimum":0}}},"CapacityKind":{"type":"string","enum":["flag","count","estimate","market"]},"ChargedView":{"type":"object","required":["currency","total","asOf"],"properties":{"currency":{"type":"string"},"total":{"type":"string"},"asOf":{"type":"string","format":"date-time"}}},"Component":{"type":"object","required":["kind","perHour"],"properties":{"kind":{"type":"string","description":"One of gpu, publicIp, disk, other; a value not listed is newer than this document."},"perHour":{"type":"string"}}},"ConnectionNode":{"type":"object","required":["index"],"properties":{"index":{"type":"integer","format":"int32","minimum":0},"host":{"type":["string","null"]},"port":{"type":["integer","null"],"format":"int32","minimum":0},"sshCommand":{"type":["string","null"]},"privateAddress":{"type":["string","null"],"description":"Where the other nodes reach this one on the cluster's private network."}}},"ConnectionPort":{"type":"object","required":["protocol","port","externalPort"],"properties":{"name":{"type":["string","null"]},"protocol":{"type":"string"},"port":{"type":"integer","format":"int32","minimum":0},"externalPort":{"type":"integer","format":"int32","minimum":0},"host":{"type":["string","null"]}}},"ConnectionUrl":{"type":"object","required":["port","url"],"properties":{"port":{"type":"integer","format":"int32","minimum":0},"url":{"type":"string"}}},"ConnectionView":{"oneOf":[{"type":"object","required":["urls","ports","kind"],"properties":{"host":{"type":["string","null"]},"urls":{"type":"array","items":{"$ref":"#/components/schemas/ConnectionUrl"}},"ports":{"type":"array","items":{"$ref":"#/components/schemas/ConnectionPort"}},"user":{"type":["string","null"],"description":"The SSH user of the default image the container runs; absent for any other image\nor while port 22 is not forwarded."},"sshCommand":{"type":["string","null"],"description":"Absent together with user."},"kind":{"type":"string","enum":["container"]}}},{"type":"object","required":["ports","kind"],"properties":{"host":{"type":["string","null"]},"port":{"type":["integer","null"],"format":"int32","minimum":0},"user":{"type":["string","null"]},"sshCommand":{"type":["string","null"]},"ports":{"type":"array","items":{"$ref":"#/components/schemas/ConnectionPort"}},"nodes":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ConnectionNode"},"description":"A cluster's machines by index — containers with SSH on whole hosts, not virtual\nmachines — each reached as the same user with the instance key. host, port and\nsshCommand above are node 0, so a client that does not read nodes reaches node 0.\nAbsent for a single machine."},"kind":{"type":"string","enum":["ssh"]}}}],"description":"sshCommand, here and in nodes, is safe to run as is: it is given only where host and user are\nplain names or IP literals; otherwise it is absent or null and the address stays data in ports."},"Container":{"type":"object","required":["image"],"properties":{"image":{"type":"string","description":"Image reference as for docker pull, e.g. a listGpuDefaultImages image.","maxLength":255,"minLength":1},"expose":{"type":"array","items":{"$ref":"#/components/schemas/Port"},"description":"Container ports to reach from outside, set at creation only; a default image's expose\nlists the ones it serves, 22/tcp for SSH. connection names the external host and port."},"environment":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentInput"},"maxItems":64},"startupCommand":{"type":["string","null"],"maxLength":2048,"minLength":1},"registryCredentials":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Credentials"}]},"sshKey":{"type":["string","null"],"description":"Public key passed to the container as SSH_PUBKEY, as default images expect. Refused with\nreason not_allowed when environment already names SSH_PUBKEY, invalid_format when empty.\nWhether an image reads it is up to the image. Without a key, ask the user to make a pair\n(ssh-keygen -t ed25519) and give the .pub line; never make one for them. Without SSH, take\nan image whose preset does not require a key and reach it through connection.ports.","maxLength":10000,"minLength":1}},"additionalProperties":false},"ContainerPatchInput":{"type":"object","properties":{"image":{"type":["string","null"],"maxLength":255,"minLength":1},"environment":{"type":["array","null"],"items":{"$ref":"#/components/schemas/EnvironmentPatchInput"},"maxItems":64},"startupCommand":{"type":["string","null"],"maxLength":2048,"minLength":1},"registryCredentials":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PatchRegistryCredentials"}]}},"additionalProperties":false},"ContainerView":{"type":"object","required":["image","expose","environment"],"properties":{"image":{"type":"string"},"expose":{"type":"array","items":{"$ref":"#/components/schemas/ExposedPort"}},"environment":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentView"},"description":"Detail includes variables with empty secret values; list items contain an empty array."},"startupCommand":{"type":["string","null"]},"registryCredentials":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RegistryView"}]},"sshKey":{"type":["string","null"],"description":"The key passed at creation; environment does not repeat it as SSH_PUBKEY."}}},"Count":{"type":"object","required":["value","offers"],"properties":{"value":{"type":"string"},"offers":{"type":"integer","minimum":0}}},"Count_u32":{"type":"object","required":["value","offers"],"properties":{"value":{"type":"integer","format":"int32","minimum":0},"offers":{"type":"integer","minimum":0}}},"CreateVolume":{"type":"object","required":["name","offerId","sizeGib"],"properties":{"name":{"type":"string","maxLength":25,"minLength":1,"pattern":"^[a-z0-9-]+$"},"offerId":{"type":"string","format":"uuid","description":"A volume offer from /v3/gpu/volume-offers."},"sizeGib":{"type":"integer","format":"int32","description":"Within the offer's bounds, in its steps from its minimum. The size never changes.","minimum":1}},"additionalProperties":false},"Credentials":{"type":"object","required":["host","username","password"],"properties":{"host":{"type":"string","example":"ghcr.io"},"username":{"type":"string"},"password":{"type":"string","writeOnly":true}},"additionalProperties":false},"DefaultImage":{"type":"object","required":["slug","name","image","expose","environment","requiresSshKey"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"image":{"type":"string"},"expose":{"type":"array","items":{"$ref":"#/components/schemas/ImagePort"}},"environment":{"type":"array","items":{"$ref":"#/components/schemas/ImageEnvironment"}},"startupCommand":{"type":["string","null"]},"requiresSshKey":{"type":"boolean","description":"The image starts sshd with the key from sshKey; show the key field."},"sshUser":{"type":["string","null"],"description":"The user the image lets in over SSH with the instance key; null where not known."}}},"EnvironmentInput":{"type":"object","required":["name","value"],"properties":{"name":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[A-Z][A-Z0-9_]*$"},"value":{"type":"string","maxLength":65536,"minLength":1},"secret":{"type":"boolean","description":"Secret values are sealed at acceptance and never returned in the clear.","default":false}},"additionalProperties":false},"EnvironmentPatchInput":{"type":"object","required":["name"],"properties":{"name":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[A-Z][A-Z0-9_]*$"},"value":{"type":"string","description":"Omit only with secret=true to retain the existing secret of this name.","maxLength":65536,"minLength":1},"secret":{"type":"boolean","description":"A supplied secret value replaces the old secret; omitted names are removed.","default":false}},"additionalProperties":false},"EnvironmentView":{"type":"object","required":["name","value","secret"],"properties":{"name":{"type":"string"},"value":{"type":"string"},"secret":{"type":"boolean"}}},"ErrorBody":{"type":"object","required":["code","error","details"],"properties":{"code":{"type":"string","description":"One of malformed_json, invalid_input, empty_patch, missing_idempotency_key, invalid_idempotency_key, unauthenticated, api_key_expired, forbidden, insufficient_scope, not_found, instance_not_found, offer_not_found, volume_not_found, volume_offer_unavailable, volume_state_conflict, method_not_allowed, request_in_progress, idempotency_key_reused, no_offer_matches, update_in_progress, instance_state_conflict, unsupported_by_provider, rental_type_mismatch, rental_type_not_available, region_ambiguous, workload_mismatch, fleet_too_large, insufficient_balance, postpay_unsupported, account_suspended, account_blocked, type_not_allowed, terms_out_of_bounds, user_unknown, reservation_conflict, rate_limited, creation_disabled, provider_unavailable, identity_unavailable, operation_outcome_unknown, internal_error. A code not listed is newer than this document: act on the HTTP status."},"error":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/ErrorDetail"}}}},"ErrorDetail":{"oneOf":[{"type":"object","required":["reason","offers","cheapestPerHour","type"],"properties":{"reason":{"type":"string","description":"Same values as the quote's rejected reason; a value not listed: show it as text."},"offers":{"type":"integer","minimum":0},"cheapestPerHour":{"type":"string","description":"The lowest full USD price per instance-hour among these offers, as the quote shows it."},"volumeId":{"type":["string","null"],"format":"uuid","description":"The volume a volume reason is about: location, workload, rental, offer_volume_limit,\nvolume_busy or volume_not_ready."},"type":{"type":"string","enum":["selection"]}}},{"type":"object","required":["required","available","window","type"],"properties":{"required":{"type":"string"},"available":{"type":"string"},"window":{"type":"integer","format":"int64"},"type":{"type":"string","enum":["balance"]}}},{"type":"object","description":"How many live resources the refusal allows: instances under the service's own per-user\nlimit, or instances and volumes together under the account's billing limit.","required":["limit","type"],"properties":{"limit":{"type":"integer","format":"int64","minimum":0},"type":{"type":"string","enum":["limit"]}}},{"type":"object","required":["location","reason","message","type"],"properties":{"location":{"$ref":"#/components/schemas/FieldLocation"},"field":{"type":["string","null"]},"pointer":{"type":["string","null"]},"reason":{"$ref":"#/components/schemas/FieldReason"},"message":{"type":"string"},"type":{"type":"string","enum":["field"]}}},{"type":"object","required":["required","type"],"properties":{"required":{"type":"string"},"type":{"type":"string","enum":["scope"]}}}],"description":"One detail of a refusal, told apart by type. A type not listed is newer than this document:\nskip the detail; code and the HTTP status still decide."},"ExposedPort":{"type":"object","required":["port","protocol"],"properties":{"port":{"type":"integer","format":"int32","minimum":0},"protocol":{"$ref":"#/components/schemas/Protocol"}}},"Facets":{"type":"object","required":["total","workloads","rentalTypes","hostTiers","gpuModels","gpuCounts","countries","unknownCountryOffers","regions","providers","cpuArchitectures","volumeRejections"],"properties":{"total":{"type":"integer","minimum":0},"priceRange":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PriceRange"}]},"workloads":{"type":"array","items":{"$ref":"#/components/schemas/Count"}},"rentalTypes":{"type":"array","items":{"$ref":"#/components/schemas/Count"}},"hostTiers":{"type":"array","items":{"$ref":"#/components/schemas/Count"}},"gpuModels":{"type":"array","items":{"$ref":"#/components/schemas/ModelFacet"}},"gpuCounts":{"type":"array","items":{"$ref":"#/components/schemas/Count_u32"}},"countries":{"type":"array","items":{"$ref":"#/components/schemas/Count"}},"unknownCountryOffers":{"type":"integer","minimum":0},"regions":{"type":"array","items":{"$ref":"#/components/schemas/RegionFacet"}},"providers":{"type":"array","items":{"$ref":"#/components/schemas/Count"}},"cpuArchitectures":{"type":"array","items":{"$ref":"#/components/schemas/Count"}},"volumeRejections":{"type":"array","items":{"$ref":"#/components/schemas/VolumeRejection"},"description":"With volumeId or volumeOfferId: offers that pass every other filter but do not take the\nvolume, by reason (location, workload, rental, offer_volume_limit, volume_busy,\nvolume_not_ready); a busy or unready volume counts every such offer. Empty otherwise."}}},"FailureView":{"type":"object","required":["code"],"properties":{"code":{"type":"string","description":"The statusDetail that ended the instance, a class rather than the cause: a spot taken back\nreads provider_terminated with reason preempted. A value not listed there reads as unknown."},"reason":{"type":["string","null"],"description":"Narrower cause in words of its source (provider, reservation, vodopad); not enumerated.\nstart_timeout: the provider accepted the create, but the machine did not get ready in time.\nUnder stop_requested it is the cause of vodopad's stop request: low_balance, overage,\naccount_suspended, account_cleared, user_blocked, operator, duration_limit,\nservice_disabled, other; the list is open, a cause not listed is newer than this document."},"details":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ErrorDetail"}}}},"FieldLocation":{"type":"string","description":"Where the field is. A location not listed is newer than this document: read it as body.","enum":["header","path","query","body"]},"FieldReason":{"type":"string","description":"What is wrong with the field. A reason not listed is newer than this document: read it as\ninvalid_format.","enum":["required","too_long","too_short","invalid_format","out_of_range","unknown_value","not_allowed","mismatch","duplicate"]},"FitView":{"type":"object","description":"What a volume fits now: offer groups and GPU models across rental types; at none, the\nreason most of the offers give.","required":["groups","gpuModels"],"properties":{"groups":{"type":"integer","minimum":0},"gpuModels":{"type":"array","items":{"type":"string"}},"reason":{"type":["string","null"],"description":"Null while something fits or nothing is on sale to judge by; same values as a quote's\nrejected reason."}}},"Gpu":{"type":"object","required":["vendor","model","vramGib","interface","count","displayName"],"properties":{"vendor":{"type":"string"},"model":{"type":"string"},"vramGib":{"type":"integer","format":"int32","minimum":0},"interface":{"type":"string"},"count":{"type":"integer","format":"int32","minimum":0},"displayName":{"type":"string","description":"The model's human name, e.g. `RTX 4090`; memory follows only for a model that comes\nin several, e.g. `A100 80GB`."}}},"GpuInput":{"type":"object","required":["vendor","model","count"],"properties":{"vendor":{"type":"string","description":"As getGpuOfferFacets gpuModels names it, e.g. nvidia."},"model":{"type":"string","description":"Exact model as getGpuOfferFacets gpuModels names it, e.g. rtx4090; an alias is refused\nwith the name to use."},"count":{"type":"integer","format":"int32","description":"GPUs per machine.","minimum":0},"vramGib":{"type":["integer","null"],"format":"int32","minimum":0},"interface":{"type":["string","null"]}},"additionalProperties":false},"GpuRequirement":{"type":"object","properties":{"vendor":{"type":["string","null"]},"model":{"type":["string","null"]},"vramGib":{"type":["integer","null"],"format":"int32","minimum":0},"interface":{"type":["string","null"]},"count":{"type":["integer","null"],"format":"int32","minimum":0}}},"GroupBillingTerms":{"type":"object","required":["minimumPeriodSeconds","stepSeconds"],"properties":{"minimumPeriodSeconds":{"type":"integer","format":"int64","minimum":0},"stepSeconds":{"type":"integer","format":"int64","minimum":0}}},"GroupPrice":{"type":"object","required":["billingTerms","currency","unit","fromPerHour","toPerHour"],"properties":{"billingTerms":{"type":"array","items":{"$ref":"#/components/schemas/GroupBillingTerms"},"description":"Every distinct effective contract in this group; the from-price belongs to cheapestOfferId."},"currency":{"type":"string"},"unit":{"type":"string"},"fromPerHour":{"type":"string"},"toPerHour":{"type":"string"}}},"GroupRequirements":{"type":"object","required":["workload","rentalType","gpu"],"properties":{"workload":{"type":"string","description":"One of container, vm, baremetal; a value not listed is newer than this document."},"rentalType":{"type":"string","description":"One of on_demand, spot; a value not listed is newer than this document."},"gpu":{"$ref":"#/components/schemas/GpuRequirement"},"region":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RegionRequirement"}]},"providers":{"type":"array","items":{"type":"string"}},"minVcpu":{"type":["integer","null"],"format":"int32","minimum":0},"minMemoryGib":{"type":["integer","null"],"minimum":0},"minStorageGib":{"type":["integer","null"],"minimum":0},"maxPricePerHour":{"type":["string","null"]},"hostTier":{"type":["string","null"],"description":"One of dedicated, shared, unknown; a value not listed is newer than this document."},"cpuArchitecture":{"type":["string","null"],"description":"One of x86_64, arm64, unknown; a value not listed is newer than this document."},"nodes":{"type":["integer","null"],"format":"int32","description":"Machines of a cluster group; absent for single machines.","minimum":0}}},"GroupView":{"type":"object","required":["groupKey","rentalType","workload","gpu","price","offers","available","volumeOffers","availabilityStatus","observedAt","outOfStockOffers","countries","unknownCountryOffers","providers","hardwareRange","cheapestOfferId","requirements","appliedFilters"],"properties":{"groupKey":{"type":"string"},"rentalType":{"type":"string","description":"One of on_demand, spot; a value not listed is newer than this document."},"workload":{"type":"string","description":"One of container, vm, baremetal; a value not listed is newer than this document."},"gpu":{"$ref":"#/components/schemas/Gpu"},"price":{"$ref":"#/components/schemas/GroupPrice"},"provisioning":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProvisioningRangeView"}]},"offers":{"type":"integer","minimum":0},"available":{"type":"integer","minimum":0},"volumeOffers":{"type":"integer","description":"Offers of the group an instance of which takes a volume at creation.","minimum":0},"availabilityStatus":{"type":"string","description":"One of available, limited, sold_out, unknown; a value not listed is newer than this document."},"observedAt":{"type":"string","format":"date-time"},"outOfStockOffers":{"type":"integer","description":"Available offers of the group the provider recently refused for lack of capacity; they\nstay on sale, the refusal is reported, not promised again.","minimum":0},"cheapestOutOfStockAt":{"type":["string","null"],"format":"date-time","description":"lastOutOfStockAt of cheapestOfferId, the offer creation selects."},"countries":{"type":"array","items":{"type":"string"}},"unknownCountryOffers":{"type":"integer","minimum":0},"providers":{"type":"array","items":{"type":"string"}},"hardwareRange":{"$ref":"#/components/schemas/HardwareRange"},"cheapestOfferId":{"type":"string","format":"uuid"},"requirements":{"$ref":"#/components/schemas/GroupRequirements"},"appliedFilters":{}}},"Hardware":{"type":"object","required":["gpu","vcpu","memoryGib","storage","cpuArchitecture"],"properties":{"gpu":{"$ref":"#/components/schemas/Gpu"},"vcpu":{"type":"integer","format":"int32","minimum":0},"memoryGib":{"type":"integer","format":"int64","minimum":0},"storage":{"$ref":"#/components/schemas/Storage"},"cpuArchitecture":{"type":"string","description":"One of x86_64, arm64, unknown; a value not listed is newer than this document."}}},"HardwareRange":{"type":"object","required":["vcpu","memoryGib","storageGib"],"properties":{"vcpu":{"type":"array","items":{"type":"integer","minimum":0}},"memoryGib":{"type":"array","items":{"type":"integer","minimum":0}},"storageGib":{"type":"array","items":{"type":"integer","minimum":0}}}},"ImageEnvironment":{"type":"object","required":["name","value"],"properties":{"name":{"type":"string"},"value":{"type":"string"}}},"ImagePort":{"type":"object","required":["port","protocol"],"properties":{"port":{"type":"integer","format":"int32","minimum":0},"protocol":{"$ref":"#/components/schemas/Protocol"}}},"InstancePatch":{"type":"object","properties":{"name":{"type":["string","null"],"maxLength":25,"minLength":1,"pattern":"^[a-z0-9-]+$"},"container":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ContainerPatchInput"}]}},"additionalProperties":false},"InstancePrice":{"type":"object","description":"The price frozen when the instance was created, with the names of `Price`. Instances created\nthrough the prior API have no `components`; those older than reservations have\nno `minimumPeriodSeconds` and `minimumCharge`.","required":["currency","unit","perHour","gpuHour","stepSeconds","perStep"],"properties":{"currency":{"type":"string"},"unit":{"type":"string"},"perHour":{"type":"string"},"gpuHour":{"type":"string","description":"As `Price.gpuHour`, over the GPUs of all the instance's machines."},"stepSeconds":{"type":"integer","format":"int64","minimum":0},"perStep":{"type":"string","description":"Exact USD of one billing step, not rounded for display."},"minimumPeriodSeconds":{"type":["integer","null"],"format":"int64"},"minimumCharge":{"type":["string","null"]},"components":{"type":["array","null"],"items":{"$ref":"#/components/schemas/Component"}}}},"InstanceView":{"type":"object","required":["id","name","createdVia","status","statusDetail","since","isTerminal","isBilling","workload","rentalType","placement","actions","createdAt","updatedAt"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"createdVia":{"type":"string","description":"One of v3, legacy (created through the prior API), unknown; a value not listed is newer than this document."},"status":{"type":"string","description":"One of pending, provisioning, running, updating, terminating, ended, failed. A value not\nlisted is newer than this document: rely on isTerminal and actions."},"statusDetail":{"type":"string","description":"Why the instance is in its status: preempted, awaiting_reservation, creating_at_provider,\nprovider_rate_limited, awaiting_bids, ready, network_pending, powered_off, container_not_ready,\nstatus_unavailable, applying_update, closing_at_provider, provider_minimum_runtime,\nuser_requested, operator_requested, stop_requested, provider_terminated, unready_timeout,\ninsufficient_funds, reservation_refused, closed_by_vodopad, provisioning_failed,\nout_of_stock, unknown. container_not_ready: the lease lives and is billed, but the provider\nreports its container not ready; it ends when the user deletes it. status_unavailable: the\nprovider did not answer the lease's status; it stays live and billed until the provider\nreports an end or the user deletes it. unready_timeout: it ran, then stayed not ready past\nthe service threshold and the service closed it; billing stops at its last confirmed life.\nout_of_stock: the provider had no capacity for the offer when the instance was created;\nnothing was billed, another offer may succeed. provider_rate_limited: the provider limits how\noften instances are created; the launch continues by itself, nothing is billed before running,\nand deleting and creating again does not speed it up. provider_terminated: the provider's\nside ended the instance, including our own account there running out of funds; the user's\nbalance is not concerned and only the time lived is billed. insufficient_funds is no longer\nsent: such an end reads provider_terminated. provider_minimum_runtime: the provider refuses\nto close the instance before the offer's minimum runtime has passed; the close runs by itself\nthen, within the minimum charge. A value not listed reads as unknown."},"since":{"type":"string","format":"date-time"},"isTerminal":{"type":"boolean"},"isBilling":{"type":"boolean","description":"The user is billed now: from activatedAt until endedAt, except while the service confirms\nthat the provider's machine is gone."},"failure":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/FailureView"}]},"workload":{"type":"string","description":"One of container, vm, baremetal; a value not listed is newer than this document."},"rentalType":{"type":"string","description":"One of on_demand, spot; a value not listed is newer than this document."},"requirements":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RequirementsInput"}]},"container":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ContainerView"}]},"vm":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/MachineView"}]},"baremetal":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/MachineView"}]},"placement":{"$ref":"#/components/schemas/PlacementView"},"price":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/InstancePrice"}]},"connection":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ConnectionView"}]},"charged":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ChargedView","description":"Total USD charges cached for ten seconds; null on failure, omitted from list items."}]},"actions":{"type":"array","items":{"type":"string"},"description":"What the instance accepts now: rename, delete, update, logs, events. logs and events come\nonly where the provider reads them, on some providers not before running. An action not\nlisted is newer than this document: ignore it."},"createdAt":{"type":"string","format":"date-time"},"activatedAt":{"type":["string","null"],"format":"date-time"},"endedAt":{"type":["string","null"],"format":"date-time","description":"When billing ended: the accepted delete or the provider's end. It can be set while status is\nstill terminating: the service then closes the machine at the provider at its own cost."},"updatedAt":{"type":"string","format":"date-time"}}},"LargestOnSale":{"type":"object","required":["vramGib","gpuCount"],"properties":{"vramGib":{"type":"integer","format":"int32","description":"GiB per GPU.","minimum":0},"gpuCount":{"type":"integer","format":"int32","description":"GPUs per machine.","minimum":0}}},"Lines":{"type":"object","required":["lines"],"properties":{"lines":{"type":"array","items":{"type":"string"}}}},"Machine":{"type":"object","required":["osImage","sshKey"],"properties":{"osImage":{"type":"string","description":"One of the chosen offer's osImages."},"sshKey":{"type":"string"}},"additionalProperties":false},"MachineView":{"type":"object","required":["osImage","sshKey"],"properties":{"osImage":{"type":"string"},"sshKey":{"type":"string"}}},"ModelFacet":{"type":"object","required":["vendor","model","vramGib","interface","displayName","offers","available","counts","fromPerHour","countries"],"properties":{"vendor":{"type":"string"},"model":{"type":"string"},"vramGib":{"type":"integer","format":"int32","minimum":0},"interface":{"type":"string"},"displayName":{"type":"string","description":"As `Gpu.displayName`."},"offers":{"type":"integer","minimum":0},"available":{"type":"integer","minimum":0},"counts":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"fromPerHour":{"type":"string"},"countries":{"type":"array","items":{"$ref":"#/components/schemas/Count"},"description":"Countries of the model's offers under the same filters, as `Facets.countries`; offers\nwithout a country are left out."},"provisioning":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProvisioningRangeView","description":"As `GroupView.provisioning`, over all offers of the model."}]}}},"OfferPick":{"type":"object","required":["offer","requirements"],"properties":{"offer":{"$ref":"#/components/schemas/Candidate"},"requirements":{"$ref":"#/components/schemas/PickRequirements","description":"Pass as requirements to quoteGpuInstance and createGpuInstance unchanged."}}},"OfferPicks":{"type":"object","required":["items","rejected"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/OfferPick"},"description":"Cheapest first, in the order creation selects."},"rejected":{"type":"array","items":{"$ref":"#/components/schemas/Rejected"},"description":"Why the other offers of this size do not fit, as the quote names it; read it when items\nis empty."},"largestOnSale":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LargestOnSale","description":"With no items: the largest GPU memory and, apart from it, the largest GPU count on sale\nfor this workload and rental type, to lower minVramGib or gpuCount to; absent when\nnothing of them is on sale."}]}}},"OfferView":{"type":"object","required":["id","offerKind","workload","rentalType","hostTier","provider","region","origin","hardware","topology","price","availability","osImages","capabilities","groupKey"],"properties":{"id":{"type":"string","format":"uuid"},"offerKind":{"type":"string","description":"One of provider_sku (a provider's catalog item), host_offer (one host), market_profile\n(Akash: fixes the hardware profile and bid ceiling, not the host, which bids choose at\ncreation). A value not listed is newer than this document."},"workload":{"type":"string","description":"One of container, vm, baremetal; a value not listed is newer than this document."},"rentalType":{"type":"string","description":"One of on_demand, spot; a value not listed is newer than this document."},"preemption":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PreemptionView"}]},"hostTier":{"type":"string","description":"One of dedicated, shared, unknown; a value not listed is newer than this document."},"provider":{"type":"string"},"region":{"$ref":"#/components/schemas/Region"},"dataCenter":{"type":["string","null"]},"origin":{"$ref":"#/components/schemas/Origin"},"hardware":{"$ref":"#/components/schemas/Hardware"},"topology":{"$ref":"#/components/schemas/Topology"},"price":{"$ref":"#/components/schemas/Price"},"provisioning":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProvisioningView"}]},"availability":{"$ref":"#/components/schemas/Availability"},"osImages":{"type":"array","items":{"type":"string"},"description":"Images a machine offer accepts as osImage, as the provider names them. Empty means the\nprovider takes the name as given and an unknown one fails only at the provider."},"capabilities":{"$ref":"#/components/schemas/Capabilities"},"groupKey":{"type":"string"}}},"Origin":{"type":"object","required":["provider","regionLabel"],"properties":{"provider":{"type":"string"},"regionLabel":{"type":"string"},"dataCenter":{"type":["string","null"]},"upstream":{"type":["string","null"]}}},"Paginated_DefaultImage":{"type":"object","required":["items","pagination"],"properties":{"items":{"type":"array","items":{"type":"object","required":["slug","name","image","expose","environment","requiresSshKey"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"image":{"type":"string"},"expose":{"type":"array","items":{"$ref":"#/components/schemas/ImagePort"}},"environment":{"type":"array","items":{"$ref":"#/components/schemas/ImageEnvironment"}},"startupCommand":{"type":["string","null"]},"requiresSshKey":{"type":"boolean","description":"The image starts sshd with the key from sshKey; show the key field."},"sshUser":{"type":["string","null"],"description":"The user the image lets in over SSH with the instance key; null where not known."}}}},"pagination":{"$ref":"#/components/schemas/PaginationInfo"}}},"Paginated_GroupView":{"type":"object","required":["items","pagination"],"properties":{"items":{"type":"array","items":{"type":"object","required":["groupKey","rentalType","workload","gpu","price","offers","available","volumeOffers","availabilityStatus","observedAt","outOfStockOffers","countries","unknownCountryOffers","providers","hardwareRange","cheapestOfferId","requirements","appliedFilters"],"properties":{"groupKey":{"type":"string"},"rentalType":{"type":"string","description":"One of on_demand, spot; a value not listed is newer than this document."},"workload":{"type":"string","description":"One of container, vm, baremetal; a value not listed is newer than this document."},"gpu":{"$ref":"#/components/schemas/Gpu"},"price":{"$ref":"#/components/schemas/GroupPrice"},"provisioning":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProvisioningRangeView"}]},"offers":{"type":"integer","minimum":0},"available":{"type":"integer","minimum":0},"volumeOffers":{"type":"integer","description":"Offers of the group an instance of which takes a volume at creation.","minimum":0},"availabilityStatus":{"type":"string","description":"One of available, limited, sold_out, unknown; a value not listed is newer than this document."},"observedAt":{"type":"string","format":"date-time"},"outOfStockOffers":{"type":"integer","description":"Available offers of the group the provider recently refused for lack of capacity; they\nstay on sale, the refusal is reported, not promised again.","minimum":0},"cheapestOutOfStockAt":{"type":["string","null"],"format":"date-time","description":"lastOutOfStockAt of cheapestOfferId, the offer creation selects."},"countries":{"type":"array","items":{"type":"string"}},"unknownCountryOffers":{"type":"integer","minimum":0},"providers":{"type":"array","items":{"type":"string"}},"hardwareRange":{"$ref":"#/components/schemas/HardwareRange"},"cheapestOfferId":{"type":"string","format":"uuid"},"requirements":{"$ref":"#/components/schemas/GroupRequirements"},"appliedFilters":{}}}},"pagination":{"$ref":"#/components/schemas/PaginationInfo"}}},"Paginated_InstanceView":{"type":"object","required":["items","pagination"],"properties":{"items":{"type":"array","items":{"type":"object","required":["id","name","createdVia","status","statusDetail","since","isTerminal","isBilling","workload","rentalType","placement","actions","createdAt","updatedAt"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"createdVia":{"type":"string","description":"One of v3, legacy (created through the prior API), unknown; a value not listed is newer than this document."},"status":{"type":"string","description":"One of pending, provisioning, running, updating, terminating, ended, failed. A value not\nlisted is newer than this document: rely on isTerminal and actions."},"statusDetail":{"type":"string","description":"Why the instance is in its status: preempted, awaiting_reservation, creating_at_provider,\nprovider_rate_limited, awaiting_bids, ready, network_pending, powered_off, container_not_ready,\nstatus_unavailable, applying_update, closing_at_provider, provider_minimum_runtime,\nuser_requested, operator_requested, stop_requested, provider_terminated, unready_timeout,\ninsufficient_funds, reservation_refused, closed_by_vodopad, provisioning_failed,\nout_of_stock, unknown. container_not_ready: the lease lives and is billed, but the provider\nreports its container not ready; it ends when the user deletes it. status_unavailable: the\nprovider did not answer the lease's status; it stays live and billed until the provider\nreports an end or the user deletes it. unready_timeout: it ran, then stayed not ready past\nthe service threshold and the service closed it; billing stops at its last confirmed life.\nout_of_stock: the provider had no capacity for the offer when the instance was created;\nnothing was billed, another offer may succeed. provider_rate_limited: the provider limits how\noften instances are created; the launch continues by itself, nothing is billed before running,\nand deleting and creating again does not speed it up. provider_terminated: the provider's\nside ended the instance, including our own account there running out of funds; the user's\nbalance is not concerned and only the time lived is billed. insufficient_funds is no longer\nsent: such an end reads provider_terminated. provider_minimum_runtime: the provider refuses\nto close the instance before the offer's minimum runtime has passed; the close runs by itself\nthen, within the minimum charge. A value not listed reads as unknown."},"since":{"type":"string","format":"date-time"},"isTerminal":{"type":"boolean"},"isBilling":{"type":"boolean","description":"The user is billed now: from activatedAt until endedAt, except while the service confirms\nthat the provider's machine is gone."},"failure":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/FailureView"}]},"workload":{"type":"string","description":"One of container, vm, baremetal; a value not listed is newer than this document."},"rentalType":{"type":"string","description":"One of on_demand, spot; a value not listed is newer than this document."},"requirements":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RequirementsInput"}]},"container":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ContainerView"}]},"vm":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/MachineView"}]},"baremetal":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/MachineView"}]},"placement":{"$ref":"#/components/schemas/PlacementView"},"price":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/InstancePrice"}]},"connection":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ConnectionView"}]},"charged":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ChargedView","description":"Total USD charges cached for ten seconds; null on failure, omitted from list items."}]},"actions":{"type":"array","items":{"type":"string"},"description":"What the instance accepts now: rename, delete, update, logs, events. logs and events come\nonly where the provider reads them, on some providers not before running. An action not\nlisted is newer than this document: ignore it."},"createdAt":{"type":"string","format":"date-time"},"activatedAt":{"type":["string","null"],"format":"date-time"},"endedAt":{"type":["string","null"],"format":"date-time","description":"When billing ended: the accepted delete or the provider's end. It can be set while status is\nstill terminating: the service then closes the machine at the provider at its own cost."},"updatedAt":{"type":"string","format":"date-time"}}}},"pagination":{"$ref":"#/components/schemas/PaginationInfo"}}},"Paginated_OfferView":{"type":"object","required":["items","pagination"],"properties":{"items":{"type":"array","items":{"type":"object","required":["id","offerKind","workload","rentalType","hostTier","provider","region","origin","hardware","topology","price","availability","osImages","capabilities","groupKey"],"properties":{"id":{"type":"string","format":"uuid"},"offerKind":{"type":"string","description":"One of provider_sku (a provider's catalog item), host_offer (one host), market_profile\n(Akash: fixes the hardware profile and bid ceiling, not the host, which bids choose at\ncreation). A value not listed is newer than this document."},"workload":{"type":"string","description":"One of container, vm, baremetal; a value not listed is newer than this document."},"rentalType":{"type":"string","description":"One of on_demand, spot; a value not listed is newer than this document."},"preemption":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PreemptionView"}]},"hostTier":{"type":"string","description":"One of dedicated, shared, unknown; a value not listed is newer than this document."},"provider":{"type":"string"},"region":{"$ref":"#/components/schemas/Region"},"dataCenter":{"type":["string","null"]},"origin":{"$ref":"#/components/schemas/Origin"},"hardware":{"$ref":"#/components/schemas/Hardware"},"topology":{"$ref":"#/components/schemas/Topology"},"price":{"$ref":"#/components/schemas/Price"},"provisioning":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProvisioningView"}]},"availability":{"$ref":"#/components/schemas/Availability"},"osImages":{"type":"array","items":{"type":"string"},"description":"Images a machine offer accepts as osImage, as the provider names them. Empty means the\nprovider takes the name as given and an unknown one fails only at the provider."},"capabilities":{"$ref":"#/components/schemas/Capabilities"},"groupKey":{"type":"string"}}}},"pagination":{"$ref":"#/components/schemas/PaginationInfo"}}},"Paginated_VolumeView":{"type":"object","required":["items","pagination"],"properties":{"items":{"type":"array","items":{"type":"object","required":["id","name","status","isTerminal","isBilling","sizeGib","region","volumeType","storage","actions","createdAt"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"status":{"type":"string","example":"available"},"statusDetail":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/VolumeStatusDetail"}]},"isTerminal":{"type":"boolean"},"isBilling":{"type":"boolean","description":"The volume is billed now: its resource is active and not closed."},"sizeGib":{"type":"integer","format":"int32","minimum":0},"region":{"$ref":"#/components/schemas/VolumeRegion"},"volumeType":{"type":"string"},"storage":{"type":"string","example":"block"},"compatibility":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/VolumeCompatibilityView","description":"Null while the catalogue has not described the volume's offer."}]},"price":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/VolumePrice"}]},"attachedTo":{"type":["string","null"],"format":"uuid","description":"The instance the volume is attached to; volumes attach at instance creation only."},"charged":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ChargedView","description":"Total USD charged, cached for ten seconds; null on failure, omitted from list items."}]},"actions":{"type":"array","items":{"type":"string"},"example":["rename","delete"]},"createdAt":{"type":"string","format":"date-time"},"endedAt":{"type":["string","null"],"format":"date-time"},"fit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/FitView","description":"What the volume fits now; null once it ended."}]},"targetFit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TargetFitView","description":"Against targetOfferId or targetWorkload with targetRentalType; omitted without a target."}]}}}},"pagination":{"$ref":"#/components/schemas/PaginationInfo"}}},"PaginationInfo":{"type":"object","required":["totalRecords","filteredRecords","totalPages","currentPage","perPage"],"properties":{"totalRecords":{"type":"integer","format":"int64","minimum":0},"filteredRecords":{"type":"integer","format":"int64","minimum":0},"totalPages":{"type":"integer","format":"int64","minimum":0},"currentPage":{"type":"integer","format":"int64","minimum":0},"perPage":{"type":"integer","format":"int64","minimum":0}}},"PatchRegistryCredentials":{"type":"object","required":["host","username","password"],"properties":{"host":{"type":"string"},"username":{"type":"string"},"password":{"type":"string","writeOnly":true}},"additionalProperties":false},"PickGpu":{"type":"object","required":["vendor","model","count"],"properties":{"vendor":{"type":"string"},"model":{"type":"string"},"count":{"type":"integer","format":"int32","minimum":0}}},"PickRequirements":{"type":"object","required":["workload","rentalType","offerId","gpu"],"properties":{"workload":{"type":"string","description":"One of container, vm, baremetal."},"rentalType":{"type":"string","description":"One of on_demand, spot."},"offerId":{"type":"string","format":"uuid"},"gpu":{"$ref":"#/components/schemas/PickGpu"}}},"PlacementCapabilities":{"type":"object","required":["logs","events","update","environment"],"properties":{"logs":{"type":"boolean"},"events":{"type":"boolean"},"update":{"type":"boolean"},"privateRegistry":{"type":["boolean","null"]},"portProtocols":{"type":["array","null"],"items":{"type":"string"}},"environment":{"type":"boolean","description":"As `Capabilities.environment`; instances placed before the flag read the provider's current one."}}},"PlacementView":{"type":"object","required":["offerId","provider","region","origin","hardware","hostTier","topology","rentalType","capabilities","volumes","placedAt"],"properties":{"offerId":{"type":"string","format":"uuid"},"offerKind":{"type":["string","null"],"description":"One of provider_sku (a provider's catalog item), host_offer (one host), market_profile\n(Akash: fixes the hardware profile and bid ceiling, not the host, which bids choose at\ncreation). A value not listed is newer than this document."},"provider":{"type":"string"},"region":{"$ref":"#/components/schemas/Region"},"dataCenter":{"type":["string","null"]},"origin":{"$ref":"#/components/schemas/Origin"},"hardware":{"$ref":"#/components/schemas/Hardware"},"hostTier":{"type":"string","description":"One of dedicated, shared, unknown; a value not listed is newer than this document."},"topology":{"$ref":"#/components/schemas/Topology"},"rentalType":{"type":"string","description":"One of on_demand, spot; a value not listed is newer than this document."},"preemption":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PreemptionView","description":"Present for spot only: how the provider takes the machine back."}]},"capabilities":{"$ref":"#/components/schemas/PlacementCapabilities"},"provisioning":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProvisioningView","description":"The estimate frozen at creation; the launch counts from createdAt. Null when there was none."}]},"volumes":{"type":"array","items":{"$ref":"#/components/schemas/PlacementVolume"},"description":"Volumes attached at creation; they outlive the instance and stay listed after it ends,\nuntil another instance takes them."},"placedAt":{"type":"string","format":"date-time"}}},"PlacementVolume":{"type":"object","required":["id","name","sizeGib","storage"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"sizeGib":{"type":"integer","format":"int32","minimum":0},"storage":{"type":"string","description":"block: a device the client formats and mounts; filesystem: mounted without formatting. A\nvalue not listed is newer than this document."},"device":{"type":["string","null"],"description":"The device the provider last named for it inside the machine, read after placement; null\nwhere it does not say."}}},"Port":{"type":"object","required":["port","protocol"],"properties":{"port":{"type":"integer","format":"int32","minimum":0},"protocol":{"$ref":"#/components/schemas/Protocol"}},"additionalProperties":false},"PreemptionView":{"type":"object","description":"A spot instance has one life: the provider may take the machine back at any time, and any\nstop, including a power-off from inside, ends the instance together with its disk. The\ninstance then ends with statusDetail preempted and failure.code provider_terminated.","required":["noticeSeconds","signal","dataSurvives"],"properties":{"noticeSeconds":{"type":"integer","format":"int32","description":"Warning the provider gives before taking the machine back; 0 is none.","minimum":0},"signal":{"$ref":"#/components/schemas/Signal"},"dataSurvives":{"type":"boolean","description":"Whether the disk outlives the take-back; false: data is lost with the instance."}}},"Price":{"type":"object","description":"Price of an offer or a quote match. The instance card carries the same names in `InstancePrice`.","required":["currency","unit","perHour","gpuHour","stepSeconds","perStep","minimumPeriodSeconds","minimumCharge","components"],"properties":{"currency":{"type":"string"},"unit":{"type":"string"},"perHour":{"type":"string"},"gpuHour":{"type":"string","description":"USD of one GPU-hour: `perHour` over the GPUs of all machines, so offers with different\nGPU counts compare. The GPU part of the machine's price is the gpu entry of `components`."},"stepSeconds":{"type":"integer","format":"int64","minimum":0},"perStep":{"type":"string","description":"Exact USD of one billing step, not rounded for display."},"minimumPeriodSeconds":{"type":"integer","format":"int64","minimum":0},"minimumCharge":{"type":"string"},"components":{"type":"array","items":{"$ref":"#/components/schemas/Component"}}}},"PriceRange":{"type":"object","required":["minPerHour","maxPerHour"],"properties":{"minPerHour":{"type":"string"},"maxPerHour":{"type":"string"}}},"Protocol":{"type":"string","enum":["tcp","udp","http"]},"ProvisioningRangeView":{"type":"object","description":"Typical times of the group's offers from fastest to slowest and the latest upper bound;\neach is null when no offer of the group has it, but never all three.","properties":{"typicalFromSeconds":{"type":["integer","null"],"format":"int64","minimum":0},"typicalToSeconds":{"type":["integer","null"],"format":"int64","minimum":0},"upperToSeconds":{"type":["integer","null"],"format":"int64","minimum":0}}},"ProvisioningView":{"type":"object","description":"Expected time from creation to a ready instance. At least one of typicalSeconds and\nupperSeconds is set, and typicalSeconds never exceeds upperSeconds; past upperSeconds the\nlaunch takes longer than usual.","required":["basis"],"properties":{"typicalSeconds":{"type":["integer","null"],"format":"int64","minimum":0},"upperSeconds":{"type":["integer","null"],"format":"int64","minimum":0},"basis":{"type":"string","description":"declared (the provider's promised boot, or the service's baseline for a provider without\nenough launches of its own) or measured (the service's recent successful launches).\nA value not listed is newer than this document."}}},"QuoteContainer":{"type":"object","required":["image"],"properties":{"image":{"type":"string","description":"Image reference as for docker pull, e.g. a listGpuDefaultImages image.","maxLength":255,"minLength":1},"startupCommand":{"type":["string","null"],"maxLength":2048,"minLength":1},"expose":{"type":["array","null"],"items":{"$ref":"#/components/schemas/QuotePort"},"description":"Container ports to reach from outside, as creation takes them; a default image's\nexpose lists the ones it serves, 22/tcp for SSH."},"registryHost":{"type":["string","null"],"example":"ghcr.io"},"environment":{"type":["array","null"],"items":{"$ref":"#/components/schemas/EnvironmentInput"},"maxItems":64},"sshKey":{"type":["string","null"],"description":"Checked as at creation, so a key that creation refuses is refused here.","maxLength":10000,"minLength":1}},"additionalProperties":false},"QuoteMachine":{"type":"object","required":["osImage"],"properties":{"osImage":{"type":"string","description":"One of the chosen offer's osImages."}},"additionalProperties":false},"QuotePort":{"type":"object","required":["port","protocol"],"properties":{"port":{"type":"integer","format":"int32","minimum":0},"protocol":{"$ref":"#/components/schemas/Protocol"}},"additionalProperties":false},"QuoteRequest":{"type":"object","required":["requirements"],"properties":{"requirements":{"$ref":"#/components/schemas/RequirementsInput"},"container":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/QuoteContainer"}]},"vm":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/QuoteMachine"}]},"baremetal":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/QuoteMachine"}]}},"additionalProperties":false},"QuoteResponse":{"type":"object","required":["alternatives","rejected","requirements","estimatedAt","binding"],"properties":{"match":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Candidate"}]},"alternatives":{"type":"array","items":{"$ref":"#/components/schemas/Alternative"}},"rejected":{"type":"array","items":{"$ref":"#/components/schemas/Rejected"}},"requirements":{"type":"object"},"estimatedAt":{"type":"string","format":"date-time"},"binding":{"type":"boolean","description":"Always false: the estimate holds no offer, capacity or price. Creation selects again with\nthe same requirements; pass offerId or maxPricePerHour to keep it to this offer or price."},"volumes":{"type":"array","items":{"$ref":"#/components/schemas/QuoteVolumeLine"},"description":"The named volumes' own hourly prices, paid beside the instance's; omitted without volumes\nand when a named volume refuses every offer."}}},"QuoteVolume":{"type":"object","required":["offerId","sizeGib"],"properties":{"offerId":{"type":"string","format":"uuid","description":"A volume offer from /v3/gpu/volume-offers."},"sizeGib":{"type":"integer","format":"int32","description":"Within the offer's bounds, in its steps from its minimum.","minimum":1}},"additionalProperties":false},"QuoteVolumeLine":{"type":"object","required":["volumeId"],"properties":{"volumeId":{"type":"string","format":"uuid"},"perHour":{"type":["string","null"],"description":"As the volume's reservation froze it; null where that price is not known."}}},"Region":{"type":"object","required":["provider","label"],"properties":{"provider":{"type":"string"},"label":{"type":"string"},"country":{"type":["string","null"]}}},"RegionFacet":{"type":"object","required":["provider","label","offers"],"properties":{"provider":{"type":"string"},"label":{"type":"string"},"country":{"type":["string","null"]},"offers":{"type":"integer","minimum":0}}},"RegionInput":{"type":"object","properties":{"country":{"type":["string","null"]},"provider":{"type":["string","null"]},"label":{"type":["string","null"]}},"additionalProperties":false},"RegionRequirement":{"type":"object","properties":{"country":{"type":["string","null"]},"provider":{"type":["string","null"]},"label":{"type":["string","null"]}}},"RegistryView":{"type":"object","required":["host","username"],"properties":{"host":{"type":"string"},"username":{"type":"string"}}},"Rejected":{"type":"object","required":["reason","offers","cheapestPerHour"],"properties":{"reason":{"type":"string","description":"Why these offers do not fit: shell_command_unsupported, billing_terms_unavailable, price_ceiling,\nport_protocol_unsupported, private_registry_unsupported, container_environment_unsupported,\nport_required, os_image_unsupported, out_of_stock, provider_disabled, cpu_architecture, and\nof a named volume (volumeId): location, workload, rental, offer_volume_limit, volume_busy,\nvolume_not_ready. A reason not listed is newer than this document: show it as text.\nRejected offers cannot be created with this request: change what the reason names, or\nrelax the requirements; out_of_stock and provider_disabled are the provider's or the\noperator's, not the caller's to change. cheapestPerHour is not a price on sale."},"offers":{"type":"integer","minimum":0},"cheapestPerHour":{"type":"string"},"volumeId":{"type":["string","null"],"format":"uuid","description":"The volume a volume reason is about."}}},"RenameVolume":{"type":"object","required":["name"],"properties":{"name":{"type":"string","maxLength":25,"minLength":1,"pattern":"^[a-z0-9-]+$"}},"additionalProperties":false},"RentalKind":{"type":"string","enum":["on_demand","spot"]},"RequirementsInput":{"type":"object","required":["workload","gpu"],"properties":{"workload":{"$ref":"#/components/schemas/WorkloadKind"},"rentalType":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RentalKind"}]},"gpu":{"$ref":"#/components/schemas/GpuInput","description":"pickGpuOffers and listGpuOfferGroups give it ready; getGpuOfferFacets lists the values."},"minVcpu":{"type":["integer","null"],"format":"int32","minimum":0},"minMemoryGib":{"type":["integer","null"],"minimum":0},"minStorageGib":{"type":["integer","null"],"minimum":0},"region":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RegionInput"}]},"providers":{"type":["array","null"],"items":{"type":"string"}},"hostTier":{"type":["string","null"],"description":"One of dedicated, shared, unknown."},"cpuArchitecture":{"type":["string","null"],"description":"One of x86_64, arm64, unknown."},"offerId":{"type":["string","null"],"format":"uuid","description":"Pins the placement to one offer from listGpuOffers or pickGpuOffers; the other\nrequirements must still fit it."},"maxPricePerHour":{"type":["string","null"],"description":"Required without offerId. Full USD price per instance-hour, as a decimal string."},"volumes":{"type":["array","null"],"items":{"$ref":"#/components/schemas/VolumeInput"},"description":"The caller's ready, free volumes to attach at creation, at most 16 and each once. They\nnarrow the offers to their provider region and to what their compatibility allows; one\nno offer can take refuses with no_offer_matches and its volumeId in details. Volumes\nattach only at creation and come free when the instance ends."},"nodes":{"type":["integer","null"],"format":"int32","description":"Machines of one cluster, each with the GPUs above; 1 without offerId when absent.\nA cluster offer is chosen only by its offerId or by the same number here.","minimum":1}},"additionalProperties":false},"Signal":{"type":"string","description":"explicit: the provider reports the take-back; inferred: the service concludes it from the\nmachine stopping or disappearing.","enum":["explicit","inferred"]},"Storage":{"type":"object","required":["localGib","kind","included"],"properties":{"localGib":{"type":"integer","format":"int64","minimum":0},"kind":{"type":"string","description":"Disk kind; unknown until providers report it. A value not listed is newer than this document."},"included":{"type":"boolean"}}},"TargetFitView":{"type":"object","description":"Whether the volume fits the target the list was asked against, and why not.","required":["ok"],"properties":{"ok":{"type":"boolean"},"reason":{"type":["string","null"],"description":"Null when it fits, or when no offer on sale now is the target; same values as a quote's\nrejected reason. Only offers on sale and in stock count, as at creation."}}},"Topology":{"type":"object","required":["nodes"],"properties":{"nvlink":{"type":["boolean","null"]},"interconnect":{"type":["string","null"],"description":"The fabric between a cluster's machines, e.g. infiniband or roce; null for one machine."},"nodes":{"type":"integer","format":"int32","description":"Machines one instance rents, each with the hardware above; the price is for all of them.\nA cluster's machines are containers with SSH on whole hosts, not virtual machines:\nno own kernel, no reboot of the host.","minimum":0}}},"VolumeCompatibilityView":{"type":"object","description":"What instances a volume of this offer attaches to, as its provider allows.","required":["workloads","rentalTypes","attach","shared","exposure"],"properties":{"workloads":{"type":"array","items":{"type":"string"},"description":"Instance workloads: container, vm, baremetal. A value not listed is newer than this\ndocument.","example":["vm"]},"rentalTypes":{"type":"array","items":{"type":"string"},"description":"Rental types under which an attached volume keeps its data: on_demand, spot, reserved. A\nvalue not listed is newer than this document.","example":["on_demand"]},"attach":{"type":"string","description":"When the provider can attach it: at_creation, live or restart; a value not listed is newer\nthan this document. The service attaches volumes only while it creates an instance.","example":"live"},"shared":{"type":"boolean","description":"Whether more than one instance can use it at a time."},"exposure":{"type":"string","description":"How it shows inside the instance: device (format and mount it) or mount (a filesystem at a\npath or tag). A value not listed is newer than this document.","example":"device"}}},"VolumeInput":{"type":"object","required":["volumeId"],"properties":{"volumeId":{"type":"string","format":"uuid"}},"additionalProperties":false},"VolumeOfferView":{"type":"object","required":["id","region","volumeType","storage","minSizeGib","maxSizeGib","sizeStepGib","price","compatibility"],"properties":{"id":{"type":"string","format":"uuid"},"region":{"$ref":"#/components/schemas/VolumeRegion"},"volumeType":{"type":"string"},"storage":{"type":"string","description":"block: a raw device the client formats and mounts itself; filesystem: mounted without\nformatting. A value not listed is newer than this document.","example":"block"},"minSizeGib":{"type":"integer","format":"int32","minimum":0},"maxSizeGib":{"type":"integer","format":"int32","minimum":0},"sizeStepGib":{"type":"integer","format":"int32","minimum":0},"price":{"$ref":"#/components/schemas/VolumePrice"},"compatibility":{"$ref":"#/components/schemas/VolumeCompatibilityView"},"fit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/FitView","description":"What a volume of the offer would fit now."}]},"targetFit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TargetFitView","description":"Against targetOfferId or targetWorkload with targetRentalType; omitted without a target."}]}}},"VolumePrice":{"type":"object","description":"USD for a volume: per GiB-hour as offered, then per hour and per step for its size.","required":["currency","perGibHour","stepSeconds","minimumPeriodSeconds"],"properties":{"currency":{"type":"string"},"perGibHour":{"type":"string","description":"The offer's price per GiB-hour. A step bills it for the volume's size rounded up to a\nwhole atom, so perStep, perHour and minimumCharge — what is charged — exceed size times\nthis by at most one atom per step."},"perHour":{"type":["string","null"]},"stepSeconds":{"type":"integer","format":"int64","minimum":0},"perStep":{"type":["string","null"],"description":"Exact USD of one billing step, not rounded for display; only for a volume."},"minimumPeriodSeconds":{"type":"integer","format":"int64","minimum":0},"minimumCharge":{"type":["string","null"]}}},"VolumeQuoteView":{"type":"object","required":["offerId","sizeGib","price","estimatedAt","binding"],"properties":{"offerId":{"type":"string","format":"uuid"},"sizeGib":{"type":"integer","format":"int32","minimum":0},"price":{"$ref":"#/components/schemas/VolumePrice","description":"perHour, perStep and minimumCharge as creation would reserve them; the minimum charge is\nwhat the account must cover to create the volume."},"estimatedAt":{"type":"string","format":"date-time"},"binding":{"type":"boolean"}}},"VolumeRegion":{"type":"object","description":"Where a volume or a volume offer lives; an instance uses one only in the same place.","required":["provider","label"],"properties":{"provider":{"type":"string"},"label":{"type":"string"},"country":{"type":["string","null"],"description":"ISO 3166-1 alpha-2, as an instance offer's region; null where the provider does not say."}}},"VolumeRejection":{"type":"object","description":"Offers left out by the volume filter for one reason.","required":["reason","offers"],"properties":{"reason":{"type":"string","description":"Same values as a quote's rejected reason; a value not listed: show it as text."},"offers":{"type":"integer","minimum":0}}},"VolumeStatusDetail":{"type":"object","description":"Why a volume failed or ended. A code not listed is newer than this document: show it as text.","required":["code"],"properties":{"code":{"type":"string","description":"user_requested, stop_requested, operator_requested, provider_ended, billing_closed,\nprovisioning_failed, lost_at_provider, unavailable_at_provider, or the creation refusal of\nthe volume's reservation (insufficient_balance, fleet_too_large, account_suspended and the\nrest). unavailable_at_provider: the provider reports the volume unusable and the service is\nchecking it; it is not billed and can be neither deleted nor attached meanwhile.\nlost_at_provider: the provider holds the volume in a state no one can attach or delete it\nfrom; billing stopped at its last confirmed life, there is nothing to delete, and its data\nis reached only through the provider's support.","example":"fleet_too_large"}}},"VolumeView":{"type":"object","required":["id","name","status","isTerminal","isBilling","sizeGib","region","volumeType","storage","actions","createdAt"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"status":{"type":"string","example":"available"},"statusDetail":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/VolumeStatusDetail"}]},"isTerminal":{"type":"boolean"},"isBilling":{"type":"boolean","description":"The volume is billed now: its resource is active and not closed."},"sizeGib":{"type":"integer","format":"int32","minimum":0},"region":{"$ref":"#/components/schemas/VolumeRegion"},"volumeType":{"type":"string"},"storage":{"type":"string","example":"block"},"compatibility":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/VolumeCompatibilityView","description":"Null while the catalogue has not described the volume's offer."}]},"price":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/VolumePrice"}]},"attachedTo":{"type":["string","null"],"format":"uuid","description":"The instance the volume is attached to; volumes attach at instance creation only."},"charged":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ChargedView","description":"Total USD charged, cached for ten seconds; null on failure, omitted from list items."}]},"actions":{"type":"array","items":{"type":"string"},"example":["rename","delete"]},"createdAt":{"type":"string","format":"date-time"},"endedAt":{"type":["string","null"],"format":"date-time"},"fit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/FitView","description":"What the volume fits now; null once it ended."}]},"targetFit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TargetFitView","description":"Against targetOfferId or targetWorkload with targetRentalType; omitted without a target."}]}}},"WorkloadKind":{"type":"string","enum":["container","vm","baremetal"]}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-KEY"},"HTTPBearer":{"type":"http","scheme":"bearer"}}}}