{"openapi":"3.1.0","info":{"title":"Verda Cloud Public API","description":"# Introduction\n\nVerda Cloud API allows you to deploy, control instances & more via external code.\n\n## Open API schema\n\nDownload OpenAPI 3.1.0 schema here: [/v1/openapi.json](/v1/openapi.json)\n\nThe API is a RESTful API over HTTPS, all requests & responses use JSON as the data exchange format.\n\n## Official SDKs\n\nThe following SDK packages maintained by Verda Cloud and use this API:\n\n- **Python SDK**: https://github.com/verda-cloud/sdk-python\n- **Go SDK**: https://github.com/verda-cloud/verdacloud-sdk-go\n- **Terraform** and **OpenTofu** provider: https://github.com/verda-cloud/terraform-provider-verda\n\n<br/>\n\n# Quick Start Guide\n\nWe use [OAuth 2.0 Client Credentials](https://oauth.net/2/grant-types/client-credentials/) authentication scheme.\n\nYou can generate credentials via the console UI https://console.verda.com for external applications to use Verda API. The credentials are used to generate Access & Refresh tokens. All requests to this API must be authenticated using the Access token, except for a few open endpoints. Access tokens have a short lifespan, and can be regenerated using the Refresh token.\n\n## 1. Get Credentials from the Verda Cloud Dashboard\n\nGo to the Project page => **Keys** => **Cloud API Credentials** section and click on **Create**.\n\nThese credentials will be used like a username & password for your application. Store the client secret safely - like a password.\n\n<br/>\n\n## 2. Generate Access Token\n\nAn Access Token is needed to be sent with any API call for authentication. The Access Token has a limited lifetime and is expired after a while as defined in `expires_in`.\n\nIt is used as a [bearer token](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#bearer)\n\n<br/>\n\n### To get an access token, call the token endpoint with the credentials obtained in step 1:\n\n```json http\n{\n  \"method\": \"post\",\n  \"url\": \"https://api.verda.com/v1/oauth2/token\",\n  \"headers\": {\n    \"Content-Type\": \"application/json\"\n  },\n  \"body\": {\n    \"grant_type\": \"client_credentials\",\n    \"client_id\": \"<YOUR_CLIENT_ID>\",\n    \"client_secret\": \"<YOUR_CLIENT_SECRET>\"\n  }\n}\n```\n\nA valid response would look similar to this:\n\n```json\n{\n  \"access_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJoZXkiOiJ5b3UgYWN1YWxseSBjaGVja2VkIHRoaXM_In0.0RjcdKQ1NJP9gbRyXITE6LFFLwKGzeeshuubnkkfkb8\",\n  \"token_type\": \"Bearer\",\n  \"expires_in\": 3600,\n  \"refresh_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ3b3ciOiJhbmQgdGhpcyB0b28_In0.AC5gk-o-MOptUgrouEErlhr8WT3Hg_RR6px6A0I7ZEk\",\n  \"scope\": \"cloud-api-v1\"\n}\n```\n\n`access_token` is the token value, to be used in the next step.\n\n`expires_in` is the duration in seconds until the token is expired.\n\n`refresh_token` can be used to create a new access token if expired.\n\nWhen an Access Token expires, create a new one using the refresh token:\n\n```json http\n{\n  \"method\": \"post\",\n  \"url\": \"https://api.verda.com/v1/oauth2/token\",\n  \"headers\": {\n    \"Content-Type\": \"application/json\"\n  },\n  \"body\": {\n    \"grant_type\": \"refresh_token\",\n    \"refresh_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ3b3ciOiJhbmQgdGhpcyB0b28_In0.AC5gk-o-MOptUgrouEErlhr8WT3Hg_RR6px6A0I7ZEk\"\n  }\n}\n```\n\nThe response will include a new token.\n\n<br/>\n\n## 3. Make REST API Calls\n\nThat's it, you are ready to use the API, don't forget to add the Access Token to your calls:\n\nLet's call the `/balance` endpoint.\n\nAdd the Access Token value to the `Authorization` header, preceded by the \"Bearer\" string and a space:\n\n```json http\n{\n  \"method\": \"get\",\n  \"url\": \"https://api.verda.com/v1/balance\",\n  \"headers\": {\n    \"Authorization\": \"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJoZXkiOiJ5b3UgYWN1YWxseSBjaGVja2VkIHRoaXM_In0.0RjcdKQ1NJP9gbRyXITE6LFFLwKGzeeshuubnkkfkb8\"\n  }\n}\n```\n\n<br/>\n\n# Rate Limits\n\nAuthenticated public API requests are rate limited per project in 60 second windows.\n\n## Limits enforced\n\n- **Project limit**: 500 requests per minute for all authenticated API requests made for the same project\n- **Endpoint limit**: 60 requests per minute for the same project, HTTP method, and request path combination\n\nThe endpoint limit key includes the full request path. Route-specific endpoint policies override the regular endpoint limit for the matching request path.\n\n## Headers\n\nRate limit information is returned in response headers on authenticated requests:\n\n- `RateLimit-Policy`: configured limits and window\n- `RateLimit`: current remaining quota and reset time per limit\n\nIf a limit is exceeded, the API will return HTTP `429 Too Many Requests` and also include a `Retry-After` header with the number of seconds until requests are allowed again.\n\n### Example of successful response with rate limits policy specified\n\n```\ncurl -X GET --verbose https://api.verda.com/v1/instances\nHTTP/1.1 200 OK\nContent-Type: application/json; charset=utf-8\nContent-Length: 213\nRateLimit-Policy: \"project\";q=500;w=60, \"endpoint\";q=60;w=60\nRateLimit: \"project\";r=486;t=37, \"endpoint\";r=48;t=37\n\n{...}\n```\n\n### Example of throttled response\n\n```\ncurl -X GET --verbose https://api.verda.com/v1/instances\n\nHTTP/1.1 429 Too Many Requests\nContent-Type: application/json; charset=utf-8\nContent-Length: 11\nRateLimit-Policy: \"project\";q=500;w=60, \"endpoint\";q=50;w=60\nRateLimit: \"project\";r=419;t=44, \"endpoint\";r=0;t=49\nRetry-After: 49\n```\n\n<br/>\n\n# Pagination\n\nSome endpoints support pagination using the `page` and `pageSize` query parameters. For backward compatibility, pagination does not change the JSON response payload format. Instead, clients request a page with query parameters and read pagination metadata from response headers.\n\n## Request and response format\n\n- `page`: `1`\n- `pageSize`: `10` (can be extended to a maximum of 100 records per page)\n\nWhen pagination is available, the response includes these headers:\n\n- `X-Page`: current page number\n- `X-Page-Size`: current page size\n- `X-Total-Count`: total number of matching items\n\nExample request:\n\n```\nGET /v1/scripts?page=1&pageSize=100\n```\n\nExample response:\n\n```\nHTTP/1.1 200 OK\nContent-Type: application/json\nContent-Length: 11111\nX-Page: 1\nX-Page-Size: 100\nX-Total-Count: 10000\n\n[{ \"id\": \"2b1af58-7537-4edb-ba81-82cee082c5e9\", \"name\": \"My startup script\" }]\n```\n\n<br/>\n\n# Errors\n\nError response body has following schema:\n\n| Key     | Info                                     |\n| ------- | ---------------------------------------- |\n| code    | Error type                               |\n| message | Textual description of the error details |\n\n## Error types\n\n| Code                 | Description                                                                     | Matching HTTP error code |\n| -------------------- | ------------------------------------------------------------------------------- | ------------------------ |\n| invalid_request      | Invalid request, usually an input error - missing or invalid property etc.      | 400                      |\n| unauthorized_request | Access token is missing or invalid                                              | 401                      |\n| insufficient_funds   | Not enough funds to perform the action                                          | 402                      |\n| forbidden_action     | Can't perform the current action                                                | 403                      |\n| not_found            | Resource not found, or invalid path                                             | 404                      |\n| rate_limit_exceeded  | Too many requests for the current project or endpoint window                    | 429                      |\n| server_error         | Error on datacrunch's side                                                      | 500                      |\n| service_unavailable  | Not enough resources at the moment, try again later or use a different resource | 503                      |\n\n<br/>\n\n# Compatibility\n\nThe API is versioned in the path (`/v1`) and evolves in place. We add to it regularly, so your client\nshould tolerate the following without breaking:\n\n- **New response fields.** Ignore properties you do not recognise rather than rejecting the response.\n  Avoid strict schema validation that fails on unknown properties.\n- **New enum values.** Treat every enumerated set as open-ended. Handle unrecognised values with a\n  sensible default rather than an exhaustive match that throws.\n\n<br/>\n\n# Changelog\n\n## 2026-11-05 Object storage (beta): bucket `id` and name check are deprecated\n\nThe following are deprecated and will be removed on **2026-11-10**.\n\nThe `id` field of an object storage bucket. Use `name` instead. It is returned by:\n\n- [GET /v1/object-storage/buckets](/v1/docs#tag/object-storage/GET/v1/object-storage/buckets)\n- [POST /v1/object-storage/buckets](/v1/docs#tag/object-storage/POST/v1/object-storage/buckets)\n- [GET /v1/object-storage/buckets/{bucket_name}](/v1/docs#tag/object-storage/GET/v1/object-storage/buckets/{bucket_name})\n\nThe bucket name check, [GET /v1/object-storage/buckets/check-availability/{bucket_name}](/v1/docs#tag/object-storage/GET/v1/object-storage/buckets/check-availability/{bucket_name}).\n\n## 2026-10-29 Debian image category\n\n[GET /v1/images](/v1/docs#tag/os-images/GET/v1/images) and [GET /v1/images/cluster](/v1/docs#tag/clusters/GET/v1/images/cluster) can now return `debian` in the `category` field, for Debian images.\n\n## 2026-10-28 Private networks (beta)\n\nPrivate networks connect your instances over private addresses. The API is in beta, available in selected locations and enabled per account on request.\n\n- [/v1/private-networks](/v1/docs#tag/private-networks) endpoints create and manage private networks, their subnets and routes, and list the instances attached to them.\n- [POST /v1/instances](/v1/docs#tag/instances/POST/v1/instances) accepts optional `private_ip`, `public_ip`, `network` and `subnet` to deploy an instance into a private network.\n- [GET /v1/instances](/v1/docs#tag/instances/GET/v1/instances) and [GET /v1/instances/{instance_id}](/v1/docs#tag/instances/GET/v1/instances/{instance_id}) now document `private_ip`, `private_network_id` and `subnet_id`, which are `null` for an instance that is not on a private network.\n- [GET /v1/instance-availability](/v1/docs#tag/instance-availability/GET/v1/instance-availability) accepts `private_network=true` to report only instance types deployable into a private network.\n\n## 2026-10-07 Automatic top-ups in the audit log\n\nA top-up charged automatically by auto top-up is now reported as an `auto_top_up` event instead of a `topup` one, so it can be told apart from a top-up you started yourself. This covers the charge being created, completed and failing — `com.verda.api.cloud.auto_top_up.create.v1`, `.complete.v1` and `.cancel.v1`.\n\n- [GET /v1/audit/log](/v1/docs#tag/journal/GET/v1/audit/log)\n- [POST /v1/audit/log/download](/v1/docs#tag/journal/POST/v1/audit/log/download)\n\nFiltering by `object_type=topup` therefore no longer returns automatic charges; use `auto_top_up` for those. Events recorded before this change have been relabelled the same way, so the audit log reads consistently for past and future charges. Top-ups you started yourself are unaffected.\n\n## 2026-09-25 Inference model prices in your billing currency\n\n[GET /v1/inference/models](/v1/docs#tag/inference/GET/v1/inference/models) and [GET /v1/inference/models/{code}](/v1/docs#tag/inference/GET/v1/inference/models/{code}) now quote `pricing` and `service_tier_pricing` in the currency your account is billed in. Previously prices were always in USD.\n\nEach service tier in `service_tier_pricing` is quoted at its own rate, and a service tier without prices of its own is left out.\n\n## 2026-09-24 Managed instance groups\n\nManaged instance groups provide reusable placement and template defaults for related instances. Use the `/v1/instance-groups` endpoints to manage groups. `POST /v1/instances` now accepts an optional `instance_group_id`; group instances inherit the group's instance type, image and location defaults.\n\n## 2026-09-23 Deployment system logs\n\nSystem logs of serverless container and job deployments are available through the public API. System logs are platform events about a deployment, such as scheduling failures, image pull errors and failed health checks.\n\n- [GET /v1/container-deployments/{deployment_name}/system-logs](/v1/docs#tag/serverless-containers/GET/v1/container-deployments/{deployment_name}/system-logs) returns the system logs of a container deployment.\n- [GET /v1/job-deployments/{jobName}/system-logs](/v1/docs#tag/serverless-jobs/GET/v1/job-deployments/{jobName}/system-logs) returns the system logs of a job deployment.\n\nFilter the events by `reason`, `involved_object` and `search_text`, and select the time range with `since`, `start` and `end`. Repeated events are grouped into one entry, with the number of grouped records in `count`.\n\n## 2026-09-21 SSH key creator attribution\n\nSSH key responses now include the additive nullable UUID field `created_by_user_id`, identifying the user who added that SSH key record to the project. Historical records without a matching creation event return `null`.\n\n- [GET /v1/ssh-keys](/v1/docs#tag/SSH-Keys/GET/v1/ssh-keys)\n- [GET /v1/ssh-keys/{sshKeyId}](/v1/docs#tag/SSH-Keys/GET/v1/ssh-keys/{sshKeyId})\n- [GET /v1/sshkeys](/v1/docs#tag/SSH-Keys/GET/v1/sshkeys) (deprecated alias)\n- [GET /v1/sshkeys/{sshKeyId}](/v1/docs#tag/SSH-Keys/GET/v1/sshkeys/{sshKeyId}) (deprecated alias)\n\n## 2026-09-21 HDD storage is being decommissioned\n\nHDD storage is being decommissioned. Creating and resizing `HDD` volumes is no longer supported, and these requests now receive an HTTP 400 Bad Request response.\n\nExisting HDD volumes keep working. You can still list, attach, detach, rename, restore and delete them, and you can clone one to `NVMe` to move off HDD.\n\nTo migrate an existing HDD volume, first detach it, or shut down the instance it is attached to — cloning requires the source to be detached, or its instance to be offline. Then clone it with `action: \"clone\"` and `type: \"NVMe\"`. Once the clone reaches the `detached` status, delete the HDD source.\n\n## 2026-09-16 Inference model service tiers\n\n[GET /v1/inference/models](/v1/docs#tag/inference/GET/v1/inference/models) and [GET /v1/inference/models/{code}](/v1/docs#tag/inference/GET/v1/inference/models/{code}) now return `service_tiers` (the service tiers a model supports, similar to OpenAI's `service_tier`), `service_tier_pricing` (a price breakdown per tier), and `endpoint_model` (the id to send as `model` in an inference request).\n\n`endpoint_model` is always present, and is usually the same as `code`. Send it as-is; there is no case where you have to fall back to another field.\n\n## 2026-09-15 New image categories\n\n[GET /v1/images](/v1/docs#tag/os-images/GET/v1/images) and [GET /v1/images/cluster](/v1/docs#tag/clusters/GET/v1/images/cluster) can now return `confidentialComputing` and `docker` in the `category` field, for confidential computing and Docker images.\n\n## 2026-09-14 Container deployment templates\n\nCurated model templates for serverless containers are available through the public API. A template pins an open model from Hugging Face to a serving engine and a tested configuration, so one request creates a working inference deployment.\n\n- [GET /v1/container-deployment-templates](/v1/docs#tag/serverless-containers/GET/v1/container-deployment-templates) lists the templates, with the recommended compute for each.\n- [GET /v1/container-deployment-templates/{template_id}](/v1/docs#tag/serverless-containers/GET/v1/container-deployment-templates/{template_id}) returns one template with its variants and features.\n- [POST /v1/container-deployment-templates/{template_id}/deployments](/v1/docs#tag/serverless-containers/POST/v1/container-deployment-templates/{template_id}/deployments) creates a container deployment from the template. Variant, features, compute, scaling, the Hugging Face token secret, and the shared memory size are optional.\n\n## 2026-09-14 Deployment logs\n\nReplica logs of serverless container and job deployments are available through the public API. Replica logs are the output that your containers write.\n\n- [GET /v1/container-deployments/{deployment_name}/logs](/v1/docs#tag/serverless-containers/GET/v1/container-deployments/{deployment_name}/logs) returns the logs of a container deployment.\n- [GET /v1/job-deployments/{jobName}/logs](/v1/docs#tag/serverless-jobs/GET/v1/job-deployments/{jobName}/logs) returns the logs of a job deployment.\n\nFilter the log lines by `container_name`, `pod` and `search_text`, and select the time range with `since`, `start` and `end`. The default time range is the last 15 minutes, and a time range cannot be longer than 7 days.\n\n## 2026-09-11 Resource tags\n\nInstances, clusters, and volumes now support key-value tags. Use tags to organize resources and filter the instance list.\n\n- Add tags while provisioning a new instance, cluster, or volume with the `tags` request property. New volumes included in an instance deployment can also have their own tags.\n- Add or remove tags from existing resources:\n  - Instances: [POST](/v1/docs#tag/instances/POST/v1/instances/{instance_id}/tags) or [DELETE](/v1/docs#tag/instances/DELETE/v1/instances/{instance_id}/tags/{tagId}) tags.\n  - Clusters: [POST](/v1/docs#tag/clusters/POST/v1/clusters/{id}/tags) or [DELETE](/v1/docs#tag/clusters/DELETE/v1/clusters/{id}/tags/{tagId}) tags.\n  - Volumes: [POST](/v1/docs#tag/volumes/POST/v1/volumes/{volume_id}/tags) or [DELETE](/v1/docs#tag/volumes/DELETE/v1/volumes/{volume_id}/tags/{tagId}) tags.\n- Tags are reusable within a project: the same key-value pair receives the same tag id wherever it is applied.\n- Filter instances with `GET /v1/instances?tag=key` or `GET /v1/instances?tag=key=value`. Repeat `tag` to require multiple tags.\n\nEach resource can have up to 10 tags. Tag keys are normalized to lowercase; omit `value` to create a freeform tag.\n\n## 2026-07-30 Audit logs\n\nThe project audit logs is now available in the console and via the public API. It gives you a record of who did what in a project, when, and from where, using the [CloudEvents 1.0](https://github.com/cloudevents/spec) JSON format.\n\n- [GET /v1/audit/log](/v1/docs#tag/journal/GET/v1/audit/log) reads events, newest first.\n- [POST /v1/audit/log/download](/v1/docs#tag/journal/POST/v1/audit/log/download) exports the matching events as a single JSON file. Returns temporary URL that can be used to download the file.\n\nOnly the project owner and members with the `admin` role can read or export the audit log.\n\nRead more about the audit log in the [Audit logs](https://docs.verda.com/resources/audit-logs/) section in our documentation.\n\n## 2026-06-12 Startup script list sorting\n\n`GET /v1/scripts` is now sorted by creation date **descending by default**, so the most recently created scripts appear first and land on the first page. Previously the list was sorted ascending, which pushed newly created scripts onto the last page once pagination was in effect.\n\nYou can control the order with the optional `orderBy` and `orderDirection` query parameters:\n\n- `orderBy=created_at` — field to sort by. The only supported value is `created_at`, the script's creation timestamp from the response payload (also the default).\n- `orderDirection=desc` — sort direction, either `asc` or `desc`. Defaults to `desc`.\n\nThe startup script payload now also includes the `created_at` timestamp. To restore the previous behavior (oldest first), request ascending order explicitly:\n\n```\nGET /v1/scripts?orderBy=created_at&orderDirection=asc\n```\n\nExample response:\n\n```json\n[\n  {\n    \"id\": \"9f3c1e2a-1b7d-4a4e-9c2f-8d5b6e7a0c11\",\n    \"name\": \"Older startup script\",\n    \"created_at\": \"2026-05-01T08:15:00Z\"\n  },\n  {\n    \"id\": \"2b1af58-7537-4edb-ba81-82cee082c5e9\",\n    \"name\": \"My startup script\",\n    \"created_at\": \"2026-06-12T10:30:00Z\"\n  }\n]\n```\n\n## 2026-06-09 SSH key fingerprint\n\nThe SSH keys endpoints now return a `fingerprint` field — the MD5 fingerprint of the public key as colon-separated hex (the same value as `ssh-keygen -E md5`), useful for automation and for matching a key against a local copy. The fingerprint is computed from the stored public key, so no extra request is needed. It is `null` for stored keys that cannot be parsed.\n\n- [GET /v1/sshkeys](/v1/docs#tag/ssh-keys/GET/v1/sshkeys)\n- [GET /v1/sshkeys/{sshKeyId}](/v1/docs#tag/ssh-keys/GET/v1/sshkeys/{sshKeyId})\n\nExample response:\n\n```json\n[\n  {\n    \"id\": \"39479972-f06d-4a94-8027-75a0b42dcf6b\",\n    \"name\": \"my-laptop\",\n    \"key\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAXy2Jl8/DqhHm9akSXVyRx3Zh5W4SzncepC2mKZEeDC user@example.com\",\n    \"fingerprint\": \"9b:11:74:af:5c:04:48:31:40:ef:b5:ef:e3:dc:33:81\"\n  }\n]\n```\n\n## 2026-03-30 Startup script quota and pagination\n\nTotal number of startup scripts in a project now limited by a per-user quota with a default of `100` scripts and a hard maximum of `10000`.\n\n`GET /v1/scripts` now supports pagination via the `page` and `pageSize` query parameters. For backward compatibility, the response payload shape is unchanged and pagination metadata is returned in headers instead. See the [Pagination](#pagination) section for details.\n\n## 2026-03-20 Scope-based access control for API tokens\n\nAPI tokens created via the OAuth 2.0 Client Credentials flow are now issued with the scope `cloud-api-v1` and restricted to documented Public API endpoints only. Previously, these tokens could access internal endpoints not intended for external use. If you are using API tokens for any undocumented endpoints, those requests will now return `403 Forbidden` with `\"Insufficient scope\"`. Only the endpoints listed in this API documentation are accessible with API tokens.\n\n## 2026-03-20 Long term periods endpoints\n\n`GET /v1/long-term/periods` is now **deprecated**. Use the dedicated endpoints instead:\n\n- [GET /v1/long-term/periods/instances](/v1/docs#tag/Long-Term/GET/v1/long-term/periods/instances) — long term periods for instances\n- [GET /v1/long-term/periods/clusters](/v1/docs#tag/Long-Term/GET/v1/long-term/periods/clusters) — long term periods for clusters\n\nImproved OpenAPI documentation for all long term period endpoints with detailed property descriptions and examples.\n\n## 2026-03-19 Property `location_code` is now required\n\nThe location_code property is now required in the request body when creating instances, clusters, and volumes via the Public API. Requests that omit it will receive an HTTP 400 Bad Request response instead of silently defaulting to FIN-01. This brings the API in line with the SDK, where specifying a region has always been mandatory.\n\nBreakdown of API changes:\n\n| Description                                                | Endpoint             | Schema change                                   |\n| ---------------------------------------------------------- | -------------------- | ----------------------------------------------- |\n| [Deploy instance](#tag/instances/POST/v1/instances)        | `POST /v1/instances` | `{ /* required */ location_code: string, ... }` |\n| [Deploy cluster](#tag/clusters/POST/v1/clusters)           | `POST /v1/clusters`  | `{ /* required */ location_code: string, ... }` |\n| [Create block volume or SFS](#tag/volumes/POST/v1/volumes) | `POST /v1/volumes`   | `{ /* required */ location_code: string, ... }` |\n\n## 2026-03-19 OpenAPI spec auth fix\n\nFixed the OpenAPI specification incorrectly requiring bearer authentication on public endpoints (`/v1/instance-types`, `/v1/cluster-types`, `/v1/container-types`, `/v1/long-term/periods`). These endpoints are publicly accessible and no longer show an authentication requirement in the spec.\n\n## 2026-03-16 Volume response improvements\n\n`GET /v1/volumes/{id}` now includes `is_permanently_deleted` and `deleted_at` fields when the volume is in `deleted` status. These fields are omitted for active volumes. The OpenAPI schema for this endpoint now uses `oneOf` to distinguish between the active-volume and deleted-volume response shapes.\n\n## 2026-03-12 Improved instance action and volume deletion responses\n\nBulk instance actions (`PUT /v1/instances`) now return structured per-action results. Each result includes the instance `id`, a `status` (`success` or `error`), and an `error` message when applicable. When all actions succeed the response is `202 Accepted`; when some fail, you receive a `207 Multi-Status` with individual outcomes. A single-instance action that is already in the requested state now returns `204 No Content` instead of an error.\n\nVolume deletion (`DELETE /v1/volumes/{id}`) now returns `204 No Content` when the volume is already deleted, making the operation idempotent.\n\nOpenAPI schema fields that accept both a single UUID string and an array of UUIDs (`id`, `ssh_key_ids`, `volume_ids`) are now documented with `oneOf` for accurate client generation.\n\n## 2026-03-11 API rate limits\n\nIntroduced rate limits to our Public API to ensure the stability of our API and platform for everyone. Rate limits are restrictions our API enforces on how frequently a user or client can make requests to our services within a given timeframe.\n\nPlease take a look at our API documentation section [\"Rate limits\"](https://api.verda.com/v1/docs#description/rate-limits).\n\n## 2026-02-03 Spot instance volume policy\n\nWhen creating a spot instance, it is now possible to specify a removal policy for the OS volume and any additional volumes created alongside it. Use the `on_spot_discontinue` field:\n\n[POST /v1/instances](/v1/docs#tag/instances/POST/v1/instances)\n\n```js\nPOST v1/instances\n{\n  \"instance_type\": \"CPU.4V.16G\",\n  \"image\": \"ubuntu-24.04\",\n  \"ssh_key_ids\": [\"442e6a59-26c2-4cea-a619-39762c0d2385\"],\n  \"hostname\": \"test-instance\",\n  \"location_code\": \"FIN-03\",\n  \"is_spot\": true,\n  \"os_volume\": {\n    \"name\": \"test-instance-os-volume\",\n    \"size\": 55,\n    // If \"delete_permanently\", the volume will be deleted when the spot instance is discontinued\n    \"on_spot_discontinue\": \"keep_detached\" | \"move_to_trash\" | \"delete_permanently\"\n  }\n}\n```\n\n## 2026-02-03 Delete volumes permanently when deleting an instance\n\nWhen deleting an instance, you can now specify whether its volumes should be moved to deleted storage (default) or deleted permanently:\n\n[PUT /v1/instances](/v1/docs#tag/instances/PUT/v1/instances)\n\n```js\nPUT v1/instances\n{\n  \"action\": \"delete\",\n  \"id\": \"442e6a59-26c2-4cea-a619-39762c0d2385\",\n  \"volume_ids\": [\"5e9e63a9-fc3b-427b-b259-0c77dce61090\"],\n  // Will delete the instance and volumes permanently\n  \"delete_permanently\": true\n}\n```\n","version":"v1","contact":{"name":"Verda Cloud Oy","url":"https://verda.com","email":"info@verda.com"}},"servers":[{"url":"https://api.verda.com"}],"security":[{"bearer":[]}],"tags":[{"name":"Clusters","description":"Deploy and manage clusters.\n      \n**Beta:** Clusters API is under active development and may change without notice."},{"name":"SSH Keys","description":"Manage SSH keys to access your instances and clusters.\n\n**Note**: `/v1/sshkeys` endpoints are deprecated. Use `/v1/ssh-keys` instead."},{"name":"Startup Scripts","description":"Manage startup scripts to be run when instance are started. One project can have up to 100 startup scripts (configurable quota up to 10000)."},{"name":"Journal","description":"Operations related to activity journal and audit log for cloud resources.\n\n**Beta:** Journal and audit log API is under active development and may change without notice. \n\n\nShows history of actions performed on resources, such as instance deployment, volume creation, deletion, etc, via public API, Console UI or internally (e.g. spot discontinue).\n      "},{"name":"Object Storage","description":"S3-compatible object storage. Manage access keys, and buckets. Read more about our object storage support [here](https://docs.verda.com/storage/object-storage).\n\n**Beta:** Object Storage API is under active development and may change without notice."},{"name":"Inference","description":"Discover the chat and inference models available on Verda: what they do, how they are served, and how to call them from an AI agent.\n\n**Beta:** the inference model catalog is under active development and may change without notice."},{"name":"Private Networks","description":"Create and manage private networks and their subnets, and attach instances to them when deploying.\n\n**Beta:** Private Networks API is under active development, available in selected locations, and may change without notice. Contact support to enable it for your account."}],"paths":{"/v1/inference/models":{"get":{"operationId":"InferenceModelController_list[1]","parameters":[],"responses":{"200":{"description":"The inference model catalog","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelsResponseDto"}}}}},"summary":"List inference models available in the catalog","tags":["Inference"]}},"/v1/inference/models/{code}":{"get":{"operationId":"InferenceModelController_get[1]","parameters":[{"name":"code","required":true,"in":"path","description":"The model code","schema":{"example":"glm-5.2","type":"string"}}],"responses":{"200":{"description":"The requested inference model, with the rate limits of the project for it","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelDetailResponseDto"}}}}},"summary":"Get a single inference model by its code","tags":["Inference"]}},"/v1/inference/usage":{"get":{"operationId":"InferenceUsageController_get","parameters":[{"name":"start","required":false,"in":"query","description":"Range start (inclusive). Defaults to 30 days before end.","schema":{"example":"2026-09-01T00:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"Range end (exclusive). Defaults to now.","schema":{"example":"2026-09-15T00:00:00.000Z","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InferenceUsageResponseDto"}}}}},"summary":"Inference token usage of the project, aggregated per day and model","tags":["Inference"]}},"/v1/inference/rate-limits":{"get":{"description":"The limits currently applied to an existing subscription are returned by `GET /v1/inference/subscriptions`","operationId":"InferenceRateLimitController_get","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InferenceRateLimitsResponseDto"}}}}},"summary":"The owner's current quota tier and the RPM/TPM limits it applies to this project per model and service tier","tags":["Inference"]}},"/v1/inference/tiers":{"get":{"operationId":"InferenceTierController_get","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InferenceTierResponseDto"}}}}}},"summary":"The RPM/TPM limits of every quota tier per model and service tier","tags":["Inference"],"security":[]}},"/v1/inference/subscriptions":{"get":{"operationId":"InferenceSubscriptionController_list","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InferenceSubscriptionResponseDto"}}}}}},"summary":"List inference subscriptions of the project","tags":["Inference"]}},"/v1/inference/subscriptions/status":{"get":{"operationId":"InferenceSubscriptionController_getTenant","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InferenceTenantStatusResponseDto"}}}}},"summary":"Get whether inference is active or suspended for the project","tags":["Inference"]}},"/v1/inference/subscriptions/{model_code}/{service_tier}":{"put":{"operationId":"InferenceSubscriptionController_subscribe","parameters":[{"name":"model_code","required":true,"in":"path","schema":{"example":"kimi-k3","type":"string"}},{"name":"service_tier","required":true,"in":"path","schema":{"type":"string","enum":["standard","flex","batch","fast"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InferenceSubscriptionResponseDto"}}}},"400":{"description":"The model does not offer the service tier (`service_tier_not_offered`), or the limits of the inference tier are not available (`quota_tier_unavailable`)"},"402":{"description":"The project balance, including its credit limit, is below the minimum needed for inference (`insufficient_balance`)"},"403":{"description":"The project has no access to the model (`model_access_denied`)"},"404":{"description":"The model is not available (`model_not_found`)"},"409":{"description":"The model is not open for subscriptions yet (`model_not_open`), inference is suspended for the project (`inference_suspended`), or the model has no capacity for new subscriptions (`model_out_of_capacity`, `platform_out_of_capacity`)"},"502":{"description":"The inference platform could not be reached"}},"summary":"Subscribe the project to an inference model in a service tier","tags":["Inference"]},"delete":{"operationId":"InferenceSubscriptionController_cancel","parameters":[{"name":"model_code","required":true,"in":"path","schema":{"example":"kimi-k3","type":"string"}},{"name":"service_tier","required":true,"in":"path","schema":{"type":"string","enum":["standard","flex","batch","fast"]}}],"responses":{"204":{"description":""},"404":{"description":"The project has no such subscription"}},"summary":"Cancel an inference subscription of the project","tags":["Inference"]}},"/v1/private-networks":{"post":{"operationId":"PrivateNetworksController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePrivateNetworkDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateNetworkResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Create a private network","tags":["Private Networks"]},"get":{"operationId":"PrivateNetworksController_list","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PrivateNetworkResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"List private networks","tags":["Private Networks"]}},"/v1/private-networks/{id}":{"get":{"operationId":"PrivateNetworksController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"example":"pn_d90ky5tk","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateNetworkResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Get a private network","tags":["Private Networks"]},"patch":{"operationId":"PrivateNetworksController_updateNetwork","parameters":[{"name":"id","required":true,"in":"path","schema":{"example":"pn_d90ky5tk","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePrivateNetworkDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateNetworkResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Rename a private network, or make it the default","tags":["Private Networks"]},"delete":{"operationId":"PrivateNetworksController_delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"example":"pn_d90ky5tk","type":"string"}}],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete a private network and its subnets/workloads","tags":["Private Networks"]}},"/v1/private-networks/{id}/workloads":{"get":{"operationId":"PrivateNetworksController_listWorkloads","parameters":[{"name":"id","required":true,"in":"path","schema":{"example":"pn_d90ky5tk","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PrivateNetworkWorkloadResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"List the instances on a private network","tags":["Private Networks"]}},"/v1/private-networks/{id}/subnets":{"post":{"operationId":"PrivateNetworksController_createSubnet","parameters":[{"name":"id","required":true,"in":"path","schema":{"example":"pn_d90ky5tk","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSubnetDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnetResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Create a subnet in a private network","tags":["Private Networks"]},"get":{"operationId":"PrivateNetworksController_listSubnets","parameters":[{"name":"id","required":true,"in":"path","schema":{"example":"pn_d90ky5tk","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SubnetResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"List subnets in a private network","tags":["Private Networks"]}},"/v1/private-networks/{id}/subnets/{subnetId}":{"get":{"operationId":"PrivateNetworksController_getSubnet","parameters":[{"name":"id","required":true,"in":"path","schema":{"example":"pn_d90ky5tk","type":"string"}},{"name":"subnetId","required":true,"in":"path","schema":{"example":"sn_82gp8jck","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnetResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Get a subnet","tags":["Private Networks"]},"patch":{"operationId":"PrivateNetworksController_updateSubnet","parameters":[{"name":"id","required":true,"in":"path","schema":{"example":"pn_d90ky5tk","type":"string"}},{"name":"subnetId","required":true,"in":"path","schema":{"example":"sn_82gp8jck","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSubnetDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnetResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Rename a subnet, or make it its datacenter's default. Its range cannot change.","tags":["Private Networks"]},"delete":{"operationId":"PrivateNetworksController_deleteSubnet","parameters":[{"name":"id","required":true,"in":"path","schema":{"example":"pn_d90ky5tk","type":"string"}},{"name":"subnetId","required":true,"in":"path","schema":{"example":"sn_82gp8jck","type":"string"}}],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete a subnet","tags":["Private Networks"]}},"/v1/private-networks/{id}/subnets/{subnetId}/workloads":{"get":{"operationId":"PrivateNetworksController_listSubnetWorkloads","parameters":[{"name":"id","required":true,"in":"path","schema":{"example":"pn_d90ky5tk","type":"string"}},{"name":"subnetId","required":true,"in":"path","schema":{"example":"sn_82gp8jck","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PrivateNetworkWorkloadResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"List the instances holding an address in a subnet","tags":["Private Networks"]}},"/v1/private-networks/{id}/subnets/{subnetId}/routes":{"post":{"description":"A subnet has at most one route per destination. Sending an existing destination with another instance moves that route to it, keeping its `id` and `created_at`; sending the same instance again changes nothing.\n\nThe instance must be on this network, in the subnet’s location and have a public IP. It need not be running: the route stays while the instance is stopped. Traffic is dropped unless the instance forwards it (IP forwarding and NAT configured in the guest).","operationId":"PrivateNetworksController_createRoute","parameters":[{"name":"id","required":true,"in":"path","schema":{"example":"pn_d90ky5tk","type":"string"}},{"name":"subnetId","required":true,"in":"path","schema":{"example":"sn_82gp8jck","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRouteDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Route a subnet's traffic through one of the network's instances","tags":["Private Networks"]},"get":{"operationId":"PrivateNetworksController_listRoutes","parameters":[{"name":"id","required":true,"in":"path","schema":{"example":"pn_d90ky5tk","type":"string"}},{"name":"subnetId","required":true,"in":"path","schema":{"example":"sn_82gp8jck","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RouteResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"List a subnet's routes","tags":["Private Networks"]}},"/v1/private-networks/{id}/subnets/{subnetId}/routes/{routeId}":{"delete":{"operationId":"PrivateNetworksController_deleteRoute","parameters":[{"name":"id","required":true,"in":"path","schema":{"example":"pn_d90ky5tk","type":"string"}},{"name":"subnetId","required":true,"in":"path","schema":{"example":"sn_82gp8jck","type":"string"}},{"name":"routeId","required":true,"in":"path","schema":{"example":"rt_82gp8jck","type":"string"}}],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete a route","tags":["Private Networks"]}},"/v1/oauth2/token":{"post":{"description":"Get access token for public API using client credentials or refresh token.You can manage your credentials at https://console.verda.com, under the **Keys** => **Cloud API credentials** section.","operationId":"Oauth2Controller_getAccessToken","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/GetAccessTokenDto"},{"$ref":"#/components/schemas/RefreshAccessTokenPublicApiDto"}]}}}},"responses":{"200":{"description":"Valid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAccessTokenResponseDto"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponseDto"},"example":{"code":"invalid_request","message":"unsupported grant type"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponseDto"},"example":{"code":"unauthorized_request","message":"Invalid client id or client secret"}}}}},"summary":"Get access token","tags":["Authentication"],"security":[]}},"/v1/balance":{"get":{"operationId":"BalanceController_getBalance","parameters":[],"responses":{"200":{"description":"Returns the project balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalanceResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Get project balance","tags":["Balance"]}},"/v1/images":{"get":{"operationId":"ImagesController_getImageTypes","parameters":[{"name":"instance_type","required":false,"in":"query","description":"Filter OS images by instance type. Default is all instance images.","schema":{"example":"1A100.22V"}}],"responses":{"200":{"description":"Returns available image types for instances","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Os"}}}}},"404":{"description":"Instance type not found"}},"security":[{"bearer":[]}],"summary":"Get images types for instances","tags":["Images"]}},"/v1/images/cluster":{"get":{"operationId":"ImagesController_getClusterImageTypes","parameters":[{"name":"instance_type","required":false,"in":"query","description":"Filter OS images by instance type. Default is all cluster images.","schema":{"example":"16B200"}}],"responses":{"200":{"description":"Returns available image types for cluster","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Os"}},"example":[{"id":"e79a91e9-8750-44cb-af19-bf6ab83121ee","image_type":"ubuntu-22.04-cuda-12.4-cluster","name":"Ubuntu 24.04","is_default":false,"is_cluster":true,"details":["Ubuntu 22.04","CUDA 12.4"]}]}}},"404":{"description":"Instance type not found"}},"security":[{"bearer":[]}],"summary":"Get images types for cluster","tags":["Images","Clusters"]}},"/v1/audit/log":{"get":{"description":"Retrieves all events for the project, for all resources matching the filter criteria. The format to generate audit log is based on [CloudEvents specification](https://github.com/cloudevents/spec).","operationId":"AuditLogController_getAuditLog","parameters":[{"name":"action","required":false,"in":"query","description":"Filter by action type","schema":{"type":"string","enum":["other","create","start","start_complete","shutdown_complete","shutdown","delete","delete_complete","attach","attach_complete","detach","detach_complete","clone","resize","rename","transfer","trash","trash_complete","restore","cancel","provisioning","running","configure_spot","authenticate","expire","accept","update_role","revoke","login","logout","login_failed","auth_mfa_enable","auth_mfa_disable","auth_mfa_challenge","auth_mfa_verify","password_reset","complete","redeem","suspend","unsuspend","approve","decline","update","rotate_secret","disable","enable"]}},{"name":"object_type","required":false,"in":"query","description":"Filter by object type","schema":{"type":"string","enum":["compute","volume","ssh_key","invite","user","member","cloud_api_credential","object_storage_bucket","object_storage_key_pair","custom_image","startup_script","topup","coupon","bank_transfer","bank_transfer_account","balance","other","object_storage","quota_request","webhook","auto_top_up","inference","private_network","private_network_subnet","private_network_route"]}},{"name":"start_date","required":false,"in":"query","description":"Return events created at or after this timestamp. Cannot be earlier than 90 days ago. Default is 90 days ago.","schema":{"example":"2026-01-01T00:00:00.000Z","type":"string"}},{"name":"end_date","required":false,"in":"query","description":"Return events created at or before this timestamp. Cannot be before the start date.","schema":{"type":"string"}},{"name":"page_size","required":false,"in":"query","description":"Number of items per page, default 20 maximum 100","schema":{"default":20,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Cursor to start from, as specified by the previous response","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAuditLogResponseListDto"}}}},"403":{"description":"The API credentials belong to a `developer` member rather than the project owner or an `admin` member."}},"security":[{"bearer":[]}],"summary":"Retrieve audit log for the project","tags":["Journal"]}},"/v1/audit/log/download":{"post":{"description":"Streams the full audit log (matching the given filters, within the retention window) to object storage and returns a short-lived pre-signed download URL.","operationId":"AuditLogController_downloadAuditLog","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DownloadAuditLogParamsDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DownloadAuditLogResponseDto"}}}},"403":{"description":"The API credentials belong to a `developer` member rather than the project owner or an `admin` member."}},"security":[{"bearer":[]}],"summary":"Export project audit log as a JSON file","tags":["Journal"]}},"/v1/journal":{"get":{"operationId":"JournalController_getJournal","parameters":[{"name":"page","required":false,"in":"query","description":"Page number, starting from 1","schema":{"default":"1","type":"number"}},{"name":"pageSize","required":false,"in":"query","description":"Number of items per page, default 10 maximum 100","schema":{"default":"10","type":"number"}},{"name":"compute_id","required":false,"in":"query","description":"Specify either compute_id or volume_id","schema":{"type":"string"}},{"name":"volume_id","required":false,"in":"query","description":"Specify either volume_id or compute_id","schema":{"type":"string"}},{"name":"action_code","required":false,"in":"query","description":"Filter by action code","schema":{"type":"string","enum":["create","start","start:complete","shutdown:complete","shutdown","delete","delete:complete","attach","attach:complete","detach","detach:complete","clone","resize","rename","restore","transfer","trash","trash:complete","configure_spot","cancel","provisioning","running","installation:failed","validating","deleting","error"]}},{"name":"object_type","required":false,"in":"query","description":"Filter by object type","schema":{"type":"string","enum":["compute","volume"]}},{"name":"hydrate","required":false,"in":"query","description":"Hydrate every event with user, instance and volume objects","schema":{"type":"boolean"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetActivityJournalResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"Get activity journal for a compute or volume","tags":["Journal"]}},"/v1/journal/compute/{computeId}":{"get":{"description":"Get all events for a compute (instance or cluster). Includes also associated volume or shared storage attach / detach events.","operationId":"JournalController_getComputeJournal","parameters":[{"name":"computeId","required":true,"in":"path","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number, starting from 1","schema":{"default":"1","type":"number"}},{"name":"pageSize","required":false,"in":"query","description":"Number of items per page, default 10 maximum 100","schema":{"default":"10","type":"number"}},{"name":"compute_id","required":false,"in":"query","description":"Specify either compute_id or volume_id","schema":{"type":"string"}},{"name":"volume_id","required":false,"in":"query","description":"Specify either volume_id or compute_id","schema":{"type":"string"}},{"name":"action_code","required":false,"in":"query","description":"Filter by action code","schema":{"type":"string","enum":["create","start","start:complete","shutdown:complete","shutdown","delete","delete:complete","attach","attach:complete","detach","detach:complete","clone","resize","rename","restore","transfer","trash","trash:complete","configure_spot","cancel","provisioning","running","installation:failed","validating","deleting","error"]}},{"name":"object_type","required":false,"in":"query","description":"Filter by object type","schema":{"type":"string","enum":["compute","volume"]}},{"name":"hydrate","required":false,"in":"query","description":"Hydrate every event with user, instance and volume objects","schema":{"type":"boolean"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetActivityJournalResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"Get activity journal for a compute","tags":["Journal"]}},"/v1/journal/volume/{volumeId}":{"get":{"description":"Get all events for a volume. Does not include compute-related events.","operationId":"JournalController_getVolumeJournal","parameters":[{"name":"volumeId","required":true,"in":"path","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number, starting from 1","schema":{"default":"1","type":"number"}},{"name":"pageSize","required":false,"in":"query","description":"Number of items per page, default 10 maximum 100","schema":{"default":"10","type":"number"}},{"name":"compute_id","required":false,"in":"query","description":"Specify either compute_id or volume_id","schema":{"type":"string"}},{"name":"volume_id","required":false,"in":"query","description":"Specify either volume_id or compute_id","schema":{"type":"string"}},{"name":"action_code","required":false,"in":"query","description":"Filter by action code","schema":{"type":"string","enum":["create","start","start:complete","shutdown:complete","shutdown","delete","delete:complete","attach","attach:complete","detach","detach:complete","clone","resize","rename","restore","transfer","trash","trash:complete","configure_spot","cancel","provisioning","running","installation:failed","validating","deleting","error"]}},{"name":"object_type","required":false,"in":"query","description":"Filter by object type","schema":{"type":"string","enum":["compute","volume"]}},{"name":"hydrate","required":false,"in":"query","description":"Hydrate every event with user, instance and volume objects","schema":{"type":"boolean"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetActivityJournalResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"Get activity journal for a volume","tags":["Journal"]}},"/v1/volumes":{"get":{"operationId":"VolumesController_getVolumes","parameters":[{"name":"status","required":false,"in":"query","description":"Get volumes with this status. Optional","schema":{"example":"attached","type":"string","enum":["ordered","attached","attaching","detached","deleted","cloning","detaching","deleting","restoring","created","exported","canceled","canceling"]}}],"responses":{"200":{"description":"Returns a list of all volumes\n\n### Rate limits\n\nThis endpoint is rate limited to 120 requests per minute per project.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetVolumePublicResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"Get all volumes","tags":["Volumes"]},"post":{"operationId":"VolumesController_createVolume","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVolumePublicDto"}}}},"responses":{"202":{"description":"Volume ID","content":{"application/json":{"example":"f35cf328-034e-4600-92da-54d0675db60a"}}},"403":{"description":"One or more of the specified instances is not shut down"}},"security":[{"bearer":[]}],"summary":"Create volume","tags":["Volumes"]},"put":{"operationId":"VolumesController_performActions","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformVolumeActionPublicDto"}}}},"responses":{"202":{"description":""}},"security":[{"bearer":[]}],"summary":"Perform action on a volume or multiple volumes","tags":["Volumes"]}},"/v1/volumes/trash":{"get":{"operationId":"VolumesController_getVolumesInTrash","parameters":[],"responses":{"200":{"description":"Returns a list of all volumes in trash","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetVolumeInTrashPublicResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"Get all volumes that are in trash","tags":["Volumes"]}},"/v1/volumes/{volume_id}":{"get":{"operationId":"VolumesController_getVolumeById","parameters":[{"name":"volume_id","required":true,"in":"path","schema":{"example":"1d4f2052-5b86-4c6f-bb78-08be6e75ac4d","type":"string"}}],"responses":{"200":{"description":"Returns volume details","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/GetVolumePublicResponseDto"},{"$ref":"#/components/schemas/GetVolumeInTrashPublicResponseDto"}]}}}}},"security":[{"bearer":[]}],"summary":"Get volume by id","tags":["Volumes"]},"delete":{"operationId":"VolumesController_deleteVolumeById","parameters":[{"name":"volume_id","required":true,"in":"path","schema":{"example":"fdcd5285-dac0-4d5d-880b-2029d8c17d48","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteVolumePublicDto"}}}},"responses":{"202":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete volume by id","tags":["Volumes"]}},"/v1/volumes/{volume_id}/tags":{"post":{"description":"Add one key-value tag. Maximum 10 tags per volume. Omit `value` for a freeform tag. Keys are lowercased. A matching project tag is reused; adding one already linked to this volume returns 409.","operationId":"VolumesController_addTag","parameters":[{"name":"volume_id","required":true,"in":"path","schema":{"example":"1d4f2052-5b86-4c6f-bb78-08be6e75ac4d","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagDto"}}}},"responses":{"201":{"description":"Tag created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagResponseDto"}}}},"403":{"description":"Forbidden"},"409":{"description":"The matching tag is already linked to the volume"}},"security":[{"bearer":[]}],"summary":"Add a tag to a volume","tags":["Volumes"]}},"/v1/volumes/{volume_id}/tags/{tagId}":{"delete":{"operationId":"VolumesController_deleteTag","parameters":[{"name":"volume_id","required":true,"in":"path","schema":{"type":"string"}},{"name":"tagId","required":true,"in":"path","schema":{"maxLength":26,"example":"tag_01jxy0b6w4gx8n6se2x8mz2kdv","type":"string"}}],"responses":{"204":{"description":"Tag removed"},"403":{"description":"Forbidden"},"404":{"description":"Volume or tag not found"}},"security":[{"bearer":[]}],"summary":"Remove a tag from a volume","tags":["Volumes"]}},"/v1/volume-types":{"get":{"operationId":"VolumeTypesController_getVolumeTypes","parameters":[{"name":"currency","required":false,"in":"query","description":"Currency to get the price for volume types","schema":{"default":"usd","example":"usd","type":"string","enum":["usd","eur"]}}],"responses":{"200":{"description":"Returns the list of available volume types","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VolumeType"}}}}}},"security":[],"summary":"Get volume types","tags":["Volume Types"]}},"/v1/instances":{"get":{"description":"Return all instances of the project, optionally filtered by status and/or tags.\n\nTag filters: `tag=key` matches instances carrying the key with any value, `tag=key=value` matches the value exactly (split at the first `=`). Repeat the parameter to require multiple tags at once.\n\n### Rate limits\n\nThis endpoint is rate limited to 120 requests per minute per project.\n","operationId":"InstancesController_getInstances","parameters":[{"name":"status","required":false,"in":"query","description":"Get compute deployments with selected status. Optional","schema":{"type":"string","enum":["running","provisioning","offline","discontinued","unknown","ordered","notfound","new","error","deleting","validating","no_capacity","installation_failed"]}},{"name":"computeId","required":false,"in":"query","description":"Get one compute by computeId. Optional","schema":{"type":"string"}},{"name":"tag","required":false,"in":"query","description":"Return only deployments carrying every listed tag: `key` matches any value, `key=value` matches the value exactly (split at the first `=`). Repeat the parameter to require multiple tags.","schema":{"example":["environment=production","benchmark"],"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"Instance or a list of instances","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetInstanceResponsePublicApiDto"}}}}}},"security":[{"bearer":[]}],"summary":"Get instances","tags":["Instances"]},"post":{"description":"\nDeploy a new instance.\n\nBefore deploying an instance, you need to add at least ssh key to be able to access your instance.\n\nInstance types can be listed using the `GET /instance-types` endpoint.\n\nAvailable images can be listed using the `GET /images` endpoint, using the `image_type` value from the result.\n\nExisting detached OS volumes could be used as an image, put the volume ID as the `image` value.\n\nIt's also possible to define new volumes that will be created and attached to the new instance. New volumes location will be the same as the instance.\n\nExisting detached volumes can be attached to the deployed instance by adding their IDs to the `existing_volumes` property.\n    ","operationId":"InstancesController_deployInstance","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeployInstancePublicDto"}}}},"responses":{"202":{"description":"Instance ID","content":{"application/json":{"example":"a678fe70-6e0e-43fc-8390-25fa6ca04d76"}}},"503":{"description":"The requested instance type has no capacity in the selected location","content":{"application/json":{"example":{"code":"service_unavailable","message":"No capacity available"}}}}},"security":[{"bearer":[]}],"summary":"Deploy instance","tags":["Instances"]},"put":{"description":"\nPerform an action on a single or multiple instances.\n\nNote: to `hibernate` an instance, you must first `shutdown` it. All instance volumes would be detached and the instance will be deleted.\n\n**Important**: To remove an instance and stop charging your account, you must `delete` it. Using `shutdown` will keep charging your account.\n\nWhen deleting an instance, you can specify which of its' attached volumes will be deleted by providing `volume_ids` array. Any attached volumes that are not specified in the array would be detached.\n\nNote: If not providing a `volume_ids` array, only the OS volume will be deleted and the rest detached.\n    ","operationId":"InstancesController_performActions","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformInstanceActionPublicDto"}}}},"responses":{"202":{"description":"All actions completed successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InstanceActionResultDto"}}}}},"204":{"description":"Instance is already in the requested state (single action only)"},"207":{"description":"Some actions failed - returns per-action results with individual statuses and errors","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InstanceActionResultDto"}}}}},"400":{"description":"Invalid request or action not allowed (single action only)"},"404":{"description":"Instance not found (single action only)"}},"security":[{"bearer":[]}],"summary":"Perform action on an instance or multiple instances","tags":["Instances"]}},"/v1/instances/types":{"get":{"deprecated":true,"operationId":"InstancesController_getInstanceTypesDeprecated","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get instance types - deprecated","tags":["Instances"]}},"/v1/instances/{instance_id}":{"get":{"operationId":"InstancesController_getInstanceById","parameters":[{"name":"instance_id","required":true,"in":"path","schema":{"example":"690220df-5e46-4120-ac5e-4938a3d74986","type":"string"}}],"responses":{"200":{"description":"Instance details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetInstanceResponsePublicApiDto"}}}}},"security":[{"bearer":[]}],"summary":"Get instance by id","tags":["Instances"]}},"/v1/instances/availability/{instanceType}":{"get":{"deprecated":true,"operationId":"InstancesController_checkAvailabilityDeprecated","parameters":[{"name":"instanceType","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Check instance type availability - deprecated","tags":["Instances"]}},"/v1/instances/action":{"post":{"deprecated":true,"operationId":"InstancesController_performActionDeprecated","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformInstanceActionPublicDto"}}}},"responses":{"202":{"description":""}},"security":[{"bearer":[]}],"summary":"Perform action - deprecated","tags":["Instances"]}},"/v1/instances/{instance_id}/tags":{"post":{"description":"Add one key-value tag. Maximum 10 tags per instance. Omit `value` for a freeform tag. Keys are lowercased. A matching project tag is reused; adding one already linked to this instance returns 409.","operationId":"InstancesController_addTag","parameters":[{"name":"instance_id","required":true,"in":"path","schema":{"example":"690220df-5e46-4120-ac5e-4938a3d74986","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagDto"}}}},"responses":{"201":{"description":"Tag created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagResponseDto"}}}},"403":{"description":"Forbidden"},"409":{"description":"The matching tag is already linked to the instance"}},"security":[{"bearer":[]}],"summary":"Add a tag to an instance","tags":["Instances"]}},"/v1/instances/{instance_id}/tags/{tagId}":{"delete":{"operationId":"InstancesController_deleteTag","parameters":[{"name":"instance_id","required":true,"in":"path","schema":{"type":"string"}},{"name":"tagId","required":true,"in":"path","schema":{"maxLength":26,"example":"tag_01jxy0b6w4gx8n6se2x8mz2kdv","type":"string"}}],"responses":{"204":{"description":"Tag removed"},"403":{"description":"Forbidden"},"404":{"description":"Instance or tag not found"}},"security":[{"bearer":[]}],"summary":"Remove a tag from an instance","tags":["Instances"]}},"/v1/clusters":{"get":{"description":"Return all clusters of the project","operationId":"ClustersController_getInstances","parameters":[],"responses":{"200":{"description":"List of clusters","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetClusterResponsePublicApiDto"}}}}}},"security":[{"bearer":[]}],"summary":"Get clusters","tags":["Clusters"]},"post":{"description":"\nDeploy a new cluster.\n\nBefore deploying add at least one SSH key to enable access to your cluster.\n\nCluster types can be listed using the `GET /v1/cluster-types` endpoint. Image types can be listed using the `GET /v1/images/cluster` endpoint.\n     ","operationId":"ClustersController_deployCluster","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeployClusterPublicDto"}}}},"responses":{"202":{"description":"Cluster deployed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeployClusterResponsePublicApiDto"}}}}},"security":[{"bearer":[]}],"summary":"Deploy cluster","tags":["Clusters"]},"put":{"description":"Perform actions on one or more clusters.\n\nNote: Only `discontinue` action is allowed for clusters.\n\n**Important**: Local OS storage will be deleted. Shared volumes will be detached and should be deleted manually.\n    ","operationId":"ClustersController_performActions","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformClusterActionsBulkDto"}}}},"responses":{"202":{"description":""}},"security":[{"bearer":[]}],"summary":"Perform action on clusters","tags":["Clusters"]}},"/v1/clusters/{id}":{"get":{"operationId":"ClustersController_getClusterById","parameters":[{"name":"id","required":true,"in":"path","schema":{"example":"35deded8-dbea-4579-9874-6bb505092b0f","type":"string"}}],"responses":{"200":{"description":"Cluster details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetClusterResponsePublicApiDto"}}}}},"security":[{"bearer":[]}],"summary":"Get cluster by id","tags":["Clusters"]}},"/v1/clusters/{clusterId}/nodes/{nodeId}/actions":{"post":{"description":"Start or shut down a single node inside a cluster (worker, jumphost, or CPU service node).\n\n    Supported `action` values:\n    - `boot` — start the node\n    - `shutdown` — graceful shutdown\n    - `force_shutdown` — force the node off\n    ","operationId":"ClustersController_performClusterNodeAction","parameters":[{"name":"clusterId","required":true,"in":"path","schema":{"example":"e7215cb2-e9c2-4f22-bb26-c898f395fa34","type":"string"}},{"name":"nodeId","required":true,"in":"path","schema":{"example":"b7444e05-613d-4bb1-989b-c94c0f17ccf9","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformClusterNodeActionPublicDto"}}}},"responses":{"202":{"description":"Action dispatched"},"400":{"description":"Invalid action"},"404":{"description":"Cluster or node not found"}},"security":[{"bearer":[]}],"summary":"Perform action on a cluster node","tags":["Clusters"]}},"/v1/clusters/{id}/tags":{"post":{"description":"Add one key-value tag. Maximum 10 tags per cluster. Omit `value` for a freeform tag. Keys are lowercased. A matching project tag is reused; adding one already linked to this cluster returns 409.","operationId":"ClustersController_addTag","parameters":[{"name":"id","required":true,"in":"path","schema":{"example":"35deded8-dbea-4579-9874-6bb505092b0f","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagDto"}}}},"responses":{"201":{"description":"Tag created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagResponseDto"}}}},"403":{"description":"Forbidden"},"409":{"description":"The matching tag is already linked to the cluster"}},"security":[{"bearer":[]}],"summary":"Add a tag to a cluster","tags":["Clusters"]}},"/v1/clusters/{id}/tags/{tagId}":{"delete":{"operationId":"ClustersController_deleteTag","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"tagId","required":true,"in":"path","schema":{"maxLength":26,"example":"tag_01jxy0b6w4gx8n6se2x8mz2kdv","type":"string"}}],"responses":{"204":{"description":"Tag removed"},"403":{"description":"Forbidden"},"404":{"description":"Cluster or tag not found"}},"security":[{"bearer":[]}],"summary":"Remove a tag from a cluster","tags":["Clusters"]}},"/v1/instance-types":{"get":{"operationId":"InstanceTypesController_getInstanceTypes","parameters":[{"name":"currency","required":false,"in":"query","description":"Currency to get the price history for","schema":{"default":"usd","example":"usd","type":"string","enum":["usd","eur"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InstanceType"}}}}}},"summary":"Get instance types","tags":["Instance Types"],"security":[]}},"/v1/instance-types/price-history":{"get":{"deprecated":true,"operationId":"InstanceTypesController_getDailyDynamicPriceHistory","parameters":[],"responses":{"200":{"description":""}},"summary":"Get daily dynamic price history (only the last price update per day) - Not supported anymore","tags":["Instance Types"],"security":[]}},"/v1/instance-availability":{"get":{"operationId":"InstanceAvailabilityController_getAllAvailabilities","parameters":[{"name":"isSpot","required":false,"in":"query","deprecated":true,"description":"Deprecated camelCase alias for is_spot.","schema":{"type":"string"}},{"name":"locationCode","required":false,"in":"query","description":"Deprecated camelCase alias for location_code.","schema":{"example":"FIN-01","type":"string"}},{"name":"is_spot","required":false,"in":"query","description":"Check spot instance availability","schema":{"default":"false","example":"false","type":"string"}},{"name":"location_code","required":false,"in":"query","description":"Check availability for a specific location code. If omitted, all locations are checked.","schema":{"example":"FIN-01","type":"string"}},{"name":"private_network","required":false,"in":"query","description":"Only report instance types deployable into a private network.","schema":{"type":"string","enum":["true","false"]}}],"responses":{"200":{"description":"Returns the instance type availabilities for all locations","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InstanceAvailabilityResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"Get all instance type availabilities for all locations","tags":["Instance Availability"]}},"/v1/instance-availability/{instance_type}":{"get":{"operationId":"InstanceAvailabilityController_checkAvailability","parameters":[{"name":"instance_type","required":true,"in":"path","description":"The type of instance to check","schema":{"example":"1H100.80S.22V","type":"string"}},{"name":"isSpot","required":false,"in":"query","deprecated":true,"description":"Deprecated camelCase alias for is_spot.","schema":{"type":"string"}},{"name":"locationCode","required":false,"in":"query","description":"Deprecated camelCase alias for location_code.","schema":{"example":"FIN-01","type":"string"}},{"name":"is_spot","required":false,"in":"query","description":"Check spot instance availability","schema":{"default":"false","example":"false","type":"string"}},{"name":"location_code","required":false,"in":"query","description":"Check availability for a specific location code. If omitted, all locations are checked.","schema":{"example":"FIN-01","type":"string"}},{"name":"private_network","required":false,"in":"query","description":"Only report instance types deployable into a private network.","schema":{"type":"string","enum":["true","false"]}}],"responses":{"200":{"description":"Returns the instance type availability","content":{"application/json":{"schema":{"type":"boolean"},"example":true}}}},"security":[{"bearer":[]}],"summary":"Get instance type availability","tags":["Instance Availability"]}},"/v1/cluster-availability":{"get":{"operationId":"ClusterAvailabilityController_getAllAvailabilities","parameters":[{"name":"location_code","required":false,"in":"query","description":"Check availability for a specific location code. By default, all locations are checked.","schema":{"example":"FIN-03","type":"string"}}],"responses":{"200":{"description":"Returns the cluster type availabilities for specific location","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ClusterAvailabilityResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"Get all cluster types availability","tags":["Clusters"]}},"/v1/cluster-availability/{cluster_type}":{"get":{"operationId":"ClusterAvailabilityController_checkAvailability","parameters":[{"name":"cluster_type","required":true,"in":"path","description":"The type of cluster to check","schema":{"example":"16B200","type":"string"}},{"name":"location_code","required":false,"in":"query","description":"Check availability for a specific location code. By default, all locations are checked.","schema":{"example":"FIN-03","type":"string"}}],"responses":{"200":{"description":"Returns the cluster type availability","content":{"application/json":{"schema":{"type":"boolean"},"example":true}}}},"security":[{"bearer":[]}],"summary":"Get specific cluster type availability","tags":["Clusters"]}},"/v1/ssh-keys":{"get":{"operationId":"SshkeysController_getKeys","parameters":[],"responses":{"200":{"description":"Returns a list of the project's SSH keys","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetKeysResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"Get SSH keys","tags":["SSH Keys"]},"post":{"operationId":"SshkeysController_addKey","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddKeyDto"}}}},"responses":{"201":{"description":"Returns the ID of the newly created SSH key","content":{"application/json":{"example":"39479972-f06d-4a94-8027-75a0b42dcf6b"}}}},"security":[{"bearer":[]}],"summary":"Add new SSH key","tags":["SSH Keys"]},"delete":{"operationId":"SshkeysController_deleteKeys","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteKeysPublicDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete ssh keys","tags":["SSH Keys"]}},"/v1/ssh-keys/{sshKeyId}":{"get":{"operationId":"SshkeysController_getKey","parameters":[{"name":"sshKeyId","required":true,"in":"path","schema":{"example":"20ca07ab-d6b7-432b-872e-8fa52a2094e7","type":"string"}}],"responses":{"200":{"description":"Returns the SSH key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetKeysResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Get single SSH key by ID","tags":["SSH Keys"]},"delete":{"operationId":"SshkeysController_deleteKey","parameters":[{"name":"sshKeyId","required":true,"in":"path","schema":{"example":"007f08de-90a6-4641-8852-6a41b4b42b47","type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete single SSH key by ID","tags":["SSH Keys"]}},"/v1/sshkeys":{"get":{"deprecated":true,"operationId":"DeprecatedSshkeysController_getKeys","parameters":[],"responses":{"200":{"description":"Returns a list of the project's SSH keys","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetKeysResponseDto"}}}}}},"security":[{"bearer":[]},{"bearer":[]}],"summary":"Get SSH keys","tags":["SSH Keys"]},"post":{"deprecated":true,"operationId":"DeprecatedSshkeysController_addKey","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddKeyDto"}}}},"responses":{"201":{"description":"Returns the ID of the newly created SSH key","content":{"application/json":{"example":"39479972-f06d-4a94-8027-75a0b42dcf6b"}}}},"security":[{"bearer":[]},{"bearer":[]}],"summary":"Add new SSH key","tags":["SSH Keys"]},"delete":{"deprecated":true,"operationId":"DeprecatedSshkeysController_deleteKeys","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteKeysPublicDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]},{"bearer":[]}],"summary":"Delete ssh keys","tags":["SSH Keys"]}},"/v1/sshkeys/{sshKeyId}":{"get":{"deprecated":true,"operationId":"DeprecatedSshkeysController_getKey","parameters":[{"name":"sshKeyId","required":true,"in":"path","schema":{"example":"20ca07ab-d6b7-432b-872e-8fa52a2094e7","type":"string"}}],"responses":{"200":{"description":"Returns the SSH key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetKeysResponseDto"}}}}},"security":[{"bearer":[]},{"bearer":[]}],"summary":"Get single SSH key by ID","tags":["SSH Keys"]},"delete":{"deprecated":true,"operationId":"DeprecatedSshkeysController_deleteKey","parameters":[{"name":"sshKeyId","required":true,"in":"path","schema":{"example":"007f08de-90a6-4641-8852-6a41b4b42b47","type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]},{"bearer":[]}],"summary":"Delete single SSH key by ID","tags":["SSH Keys"]}},"/v1/scripts":{"get":{"operationId":"ScriptsController_getScripts","parameters":[{"name":"page","required":false,"in":"query","description":"Page number, starting from 1","schema":{"default":"1","type":"number"}},{"name":"pageSize","required":false,"in":"query","description":"Number of items per page, default 10 maximum 100","schema":{"default":"10","type":"number"}},{"name":"name","required":false,"in":"query","description":"Name filter. Startup scripts match by a partial name.","schema":{"type":"string"}},{"name":"orderBy","required":false,"in":"query","description":"Field to sort by. Only `created_at` is supported.","schema":{"default":"created_at","type":"string","enum":["created_at"]}},{"name":"orderDirection","required":false,"in":"query","description":"Sort direction, either `asc` or `desc`.","schema":{"default":"desc","type":"string","enum":["asc","desc"]}}],"responses":{"200":{"description":"Returns a list of the project's startup scripts","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetScriptResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"Get startup scripts","tags":["Startup Scripts"]},"post":{"operationId":"ScriptsController_addScript","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddScriptDto"}}}},"responses":{"201":{"description":"Returns the ID of the newly created script","content":{"application/json":{"example":"a2f111ae-9b82-4982-8d66-4e7faadef063"}}}},"security":[{"bearer":[]}],"summary":"Add new startup script","tags":["Startup Scripts"]},"delete":{"operationId":"ScriptsController_deleteScripts","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteScriptsDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete startup scripts","tags":["Startup Scripts"]}},"/v1/scripts/{scriptId}":{"get":{"operationId":"ScriptsController_getScript","parameters":[{"name":"scriptId","required":true,"in":"path","schema":{"example":"629e0136-1977-43ed-825c-7b54aa0ae47b","type":"string"}}],"responses":{"200":{"description":"Return startup script with specific ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetScriptResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Get single startup script by ID","tags":["Startup Scripts"]},"delete":{"operationId":"ScriptsController_deleteKey","parameters":[{"name":"scriptId","required":true,"in":"path","schema":{"example":"d9842c9c-b378-4062-981a-e7f191a70fa8","type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete single startup script by ID","tags":["Startup Scripts"]}},"/v1/locations":{"get":{"operationId":"LocationsController_getVolumeTypes","parameters":[],"responses":{"200":{"description":"Returns a list of available locations","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Location"}}}}}},"security":[{"bearer":[]}],"summary":"Returns a list of available locations","tags":["Locations"]}},"/v1/long-term/periods":{"get":{"deprecated":true,"operationId":"LongTermController_getLongTermPeriodsDeprecated","parameters":[],"responses":{"200":{"description":"Returns the long term periods","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LongTermPeriodResponseDto"}}}}}},"summary":"Get long term periods","tags":["Long Term"],"security":[]}},"/v1/long-term/periods/instances":{"get":{"operationId":"LongTermController_getLongTermPeriodsInstances","parameters":[],"responses":{"200":{"description":"Returns the long term periods for instances","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LongTermPeriodResponseDto"}}}}}},"summary":"Get long term periods for instances","tags":["Long Term"],"security":[]}},"/v1/long-term/periods/clusters":{"get":{"operationId":"LongTermController_getLongTermPeriodsClusters","parameters":[],"responses":{"200":{"description":"Returns the long term periods for clusters","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LongTermPeriodResponseDto"}}}}}},"summary":"Get long term periods for clusters","tags":["Long Term"],"security":[]}},"/v1/cluster-types":{"get":{"operationId":"ClusterTypesController_getInstanceTypes","parameters":[{"name":"currency","required":false,"in":"query","description":"Currency to get the price for cluster types","schema":{"default":"usd","example":"usd","type":"string","enum":["usd","eur"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ClusterType"}}}}}},"summary":"Get cluster types","tags":["Clusters"],"security":[]}},"/v1/container-types":{"get":{"operationId":"ContainerTypesController_getContainerTypes","parameters":[{"name":"currency","required":false,"in":"query","description":"Currency to get the price history for","schema":{"default":"usd","example":"usd","type":"string","enum":["usd","eur"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContainerType"}}}}}},"summary":"Get container types","tags":["Container Types"],"security":[]}},"/v1/managed-endpoints/pricing":{"get":{"operationId":"ManagedEndpointsController_getPricing","parameters":[{"name":"currency","required":false,"in":"query","description":"Currency to get the prices in","schema":{"default":"usd","example":"usd","type":"string","enum":["usd","eur"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ManagedEndpointPrice"}}}}}},"summary":"Get managed inference endpoint prices","tags":["Managed Endpoints"],"security":[]}},"/v1/object-storage/access-keys":{"get":{"description":"Returns all S3-compatible access key pairs for the project.","operationId":"ObjectStorageController_getAccessKeys","parameters":[],"responses":{"200":{"description":"List of access keys","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccessKeyPublicResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"List access keys","tags":["Object Storage"]},"post":{"description":"Create a new S3-compatible access key pair.","operationId":"ObjectStorageController_createAccessKey","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAccessKeyPublicDto"}}}},"responses":{"201":{"description":"Newly created access key pair","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAccessKeyPublicResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Create access key","tags":["Object Storage"]}},"/v1/object-storage/access-keys/{access_key_id}":{"delete":{"description":"Permanently delete an access key pair. Any applications using this key will lose access.","operationId":"ObjectStorageController_deleteAccessKey","parameters":[{"name":"access_key_id","required":true,"in":"path","schema":{"example":"7d6b8890-93fe-49c8-8cb3-e3c9a2016e49","type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete access key","tags":["Object Storage"]}},"/v1/object-storage/buckets":{"get":{"description":"Returns all buckets for the project.","operationId":"ObjectStorageController_listBuckets","parameters":[],"responses":{"200":{"description":"List of buckets","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetBucketResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"List buckets","tags":["Object Storage"]},"post":{"description":"Create a new S3-compatible bucket. Bucket names are globally unique and must follow S3 naming rules.","operationId":"ObjectStorageController_createBucket","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketNameRequestDto"}}}},"responses":{"201":{"description":"Newly created bucket","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetBucketResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Create bucket","tags":["Object Storage"]}},"/v1/object-storage/buckets/check-availability/{bucket_name}":{"get":{"deprecated":true,"description":"Deprecated: will be removed on 2026-11-10.","operationId":"ObjectStorageController_checkBucketNameAvailability","parameters":[{"name":"bucket_name","required":true,"in":"path","description":"Globally unique bucket name (S3 naming rules apply)","schema":{"example":"my-app-uploads","type":"string"}}],"responses":{"200":{"description":"Bucket name availability status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketNameAvailabilityResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Check bucket name availability","tags":["Object Storage"]}},"/v1/object-storage/buckets/{bucket_name}":{"get":{"description":"Returns details for a specific bucket including usage statistics.","operationId":"ObjectStorageController_getBucket","parameters":[{"name":"bucket_name","required":true,"in":"path","description":"Globally unique bucket name (S3 naming rules apply)","schema":{"example":"my-app-uploads","type":"string"}}],"responses":{"200":{"description":"Bucket details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetBucketResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Get bucket details","tags":["Object Storage"]},"delete":{"description":"Delete an empty bucket. The bucket must have no objects before it can be deleted.","operationId":"ObjectStorageController_deleteBucket","parameters":[{"name":"bucket_name","required":true,"in":"path","description":"Globally unique bucket name (S3 naming rules apply)","schema":{"example":"my-app-uploads","type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete bucket","tags":["Object Storage"]}},"/v1/object-storage/locations":{"get":{"description":"Returns a list of locations that support object storage.","operationId":"ObjectStorageController_getLocations","parameters":[],"responses":{"200":{"description":"List of locations","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}}},"security":[{"bearer":[]}],"summary":"Get locations that support object storage","tags":["Object Storage"]}},"/v1/container-registry/pricing":{"get":{"operationId":"ContainerRegistryController_getContainerRegistryPricing","parameters":[{"name":"currency","required":false,"in":"query","description":"Currency to get the container registry price for","schema":{"default":"usd","example":"usd","type":"string","enum":["usd","eur"]}}],"responses":{"200":{"description":"Returns the container registry price per GB per month","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerRegistryPricingResponseDto"}}}}},"security":[],"summary":"Get container registry price","tags":["Container Registry"]}},"/v1/instance-groups":{"get":{"description":"Returns this project’s live instance groups, oldest first.","operationId":"InstanceGroupsPublicController_list","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InstanceGroupResponseDto"}}}}}},"security":[{"bearer":[]}],"summary":"List instance groups","tags":["Instance groups"]},"post":{"description":"Creates a project-scoped group with a name, description, location, instance type and template.","operationId":"InstanceGroupsPublicController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInstanceGroupDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceGroupResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Create an instance group","tags":["Instance groups"]}},"/v1/instance-groups/{instance_group_id}":{"get":{"operationId":"InstanceGroupsPublicController_get","parameters":[{"name":"instance_group_id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceGroupResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Get an instance group","tags":["Instance groups"]},"patch":{"description":"Name, description, and template SSH keys or startup script can change. Location, instance type, image and OS volume are immutable.","operationId":"InstanceGroupsPublicController_update","parameters":[{"name":"instance_group_id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateInstanceGroupDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceGroupResponseDto"}}}},"400":{"description":"The patch contains an immutable or invalid field."},"409":{"description":"The update conflicts with the current group state."}},"security":[{"bearer":[]}],"summary":"Update an instance group","tags":["Instance groups"]},"delete":{"description":"Removes the group from caller-facing reads while retaining its historical row and allowing its name to be reused.","operationId":"InstanceGroupsPublicController_remove","parameters":[{"name":"instance_group_id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete an instance group","tags":["Instance groups"]}},"/v1/container-deployments/{deployment_name}/logs":{"get":{"description":"Fetch log lines from the replicas of a deployment.","operationId":"DeploymentLogsPublicApiController_getLogs","parameters":[{"name":"deployment_name","required":true,"in":"path","description":"Name of the deployment","schema":{"maxLength":63,"example":"my-deployment","type":"string"}},{"name":"container_name","required":false,"in":"query","description":"Filter by container name. If omitted, the endpoint returns the logs of all user containers of the deployment. A name that is not a container of this deployment returns no log lines.","schema":{"example":"app","type":"string"}},{"name":"pod","required":false,"in":"query","description":"Filter by replica (pod) name. Repeat the parameter for multiple values.","schema":{"example":"my-deployment-6f9c8b7d5-x2abc","type":"array","items":{"type":"string"}}},{"name":"search_text","required":false,"in":"query","description":"Filter log lines containing the given text.","schema":{"example":"error","type":"string"}},{"name":"since","required":false,"in":"query","description":"Relative time window, for example 30s, 15m, 2h, 3d. Defaults to 15m. The time range cannot exceed 7 days.","schema":{"example":"2h","type":"string"}},{"name":"start","required":false,"in":"query","description":"Start of the time range. ISO 8601 date or epoch time (s, ms, us, or ns). Overrides since. The time range cannot exceed 7 days.","schema":{"example":"2026-06-01T12:00:00Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End of the time range. ISO 8601 date, epoch time, or \"now\". Defaults to now.","schema":{"example":"now","type":"string"}},{"name":"order","required":false,"in":"query","description":"Order of the returned log lines by timestamp. The endpoint sorts the time range before it applies limit, so desc returns the newest lines of the range and asc returns the oldest. Defaults to desc.","schema":{"type":"string","enum":["asc","desc"]}},{"name":"limit","required":false,"in":"query","description":"Maximum number of log lines to return. Narrow the time range or use the order parameter to reach lines outside the returned page.","schema":{"minimum":1,"maximum":1000,"format":"int32","default":50,"type":"integer"}}],"responses":{"200":{"description":"List of log entries","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentLogEntryPublicApiResponseDto"}}}}},"401":{"description":"Unauthorized"},"404":{"description":"Deployment not found"}},"summary":"Get deployment replica logs","tags":["Serverless Containers"]}},"/v1/job-deployments/{jobName}/logs":{"get":{"description":"Fetch log lines from the replicas of a job deployment.","operationId":"JobLogsPublicApiController_getLogs","parameters":[{"name":"jobName","required":true,"in":"path","description":"Name of the job","schema":{"maxLength":63,"example":"my-job","type":"string"}},{"name":"container_name","required":false,"in":"query","description":"Filter by container name. If omitted, the endpoint returns the logs of all user containers of the deployment. A name that is not a container of this deployment returns no log lines.","schema":{"example":"app","type":"string"}},{"name":"pod","required":false,"in":"query","description":"Filter by replica (pod) name. Repeat the parameter for multiple values.","schema":{"example":"my-deployment-6f9c8b7d5-x2abc","type":"array","items":{"type":"string"}}},{"name":"search_text","required":false,"in":"query","description":"Filter log lines containing the given text.","schema":{"example":"error","type":"string"}},{"name":"since","required":false,"in":"query","description":"Relative time window, for example 30s, 15m, 2h, 3d. Defaults to 15m. The time range cannot exceed 7 days.","schema":{"example":"2h","type":"string"}},{"name":"start","required":false,"in":"query","description":"Start of the time range. ISO 8601 date or epoch time (s, ms, us, or ns). Overrides since. The time range cannot exceed 7 days.","schema":{"example":"2026-06-01T12:00:00Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End of the time range. ISO 8601 date, epoch time, or \"now\". Defaults to now.","schema":{"example":"now","type":"string"}},{"name":"order","required":false,"in":"query","description":"Order of the returned log lines by timestamp. The endpoint sorts the time range before it applies limit, so desc returns the newest lines of the range and asc returns the oldest. Defaults to desc.","schema":{"type":"string","enum":["asc","desc"]}},{"name":"limit","required":false,"in":"query","description":"Maximum number of log lines to return. Narrow the time range or use the order parameter to reach lines outside the returned page.","schema":{"minimum":1,"maximum":1000,"format":"int32","default":50,"type":"integer"}}],"responses":{"200":{"description":"List of log entries","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentLogEntryPublicApiResponseDto"}}}}},"401":{"description":"Unauthorized"},"404":{"description":"Job deployment not found"}},"summary":"Get job deployment replica logs","tags":["Serverless Jobs"]}},"/v1/job-deployments":{"get":{"operationId":"ScaledJobPublicApiController_getList","parameters":[],"responses":{"200":{"description":"Fetch a list of job deployments","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScaledJobShortInfoResponseDto"}}}}},"401":{"description":"Unauthorized"}},"summary":"Get all job deployments","tags":["Serverless Jobs"]},"post":{"operationId":"ScaledJobPublicApiController_createNewScaledJob","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateScaledJobDto"}}}},"responses":{"201":{"description":"Returns the created job","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScaledJobResponseDto"}}}},"401":{"description":"Unauthorized"}},"summary":"Create new job","tags":["Serverless Jobs"]}},"/v1/job-deployments/{jobName}":{"get":{"operationId":"ScaledJobPublicApiController_getByName","parameters":[{"name":"jobName","required":true,"in":"path","description":"Name of the job","schema":{"maxLength":63,"example":"my-job","type":"string"}}],"responses":{"200":{"description":"Fetch a job deployment by name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScaledJobResponseDto"}}}},"401":{"description":"Unauthorized"}},"summary":"Get job deployment by name","tags":["Serverless Jobs"]},"patch":{"operationId":"ScaledJobPublicApiController_updateScaledJobByName","parameters":[{"name":"jobName","required":true,"in":"path","description":"Name of the job","schema":{"maxLength":63,"example":"my-job","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchScaledJobDto"}}}},"responses":{"200":{"description":"Returns the updated job deployment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScaledJobResponseDto"}}}},"401":{"description":"Unauthorized"}},"summary":"Update job deployment","tags":["Serverless Jobs"]},"delete":{"operationId":"ScaledJobPublicApiController_deleteByName","parameters":[{"name":"jobName","required":true,"in":"path","description":"Name of the job","schema":{"maxLength":63,"example":"my-job","type":"string"}},{"name":"timeout","required":false,"in":"query","description":"Maximum time to wait for job deployment deletion in milliseconds. Set to 0 to skip waiting.","schema":{"minimum":0,"maximum":300000,"format":"int32","default":60000,"example":60000,"type":"integer"}}],"responses":{"200":{"description":""},"401":{"description":"Unauthorized"}},"summary":"Delete job deployment","tags":["Serverless Jobs"]}},"/v1/job-deployments/{jobName}/scaling":{"get":{"operationId":"ScaledJobPublicApiController_getScalingOptionsByName","parameters":[{"name":"jobName","required":true,"in":"path","description":"Name of the job","schema":{"maxLength":63,"example":"my-job","type":"string"}}],"responses":{"200":{"description":"Scaling options","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScalingOptionsResponseDto"}}}},"401":{"description":"Unauthorized"}},"summary":"Get job deployment scaling options","tags":["Serverless Jobs"]}},"/v1/job-deployments/{jobName}/purge-queue":{"post":{"operationId":"ScaledJobPublicApiController_purgeQueue","parameters":[{"name":"jobName","required":true,"in":"path","description":"Name of the job","schema":{"maxLength":63,"example":"my-job","type":"string"}}],"responses":{"201":{"description":""},"401":{"description":"Unauthorized"}},"summary":"Purge job deployment queue","tags":["Serverless Jobs"]}},"/v1/job-deployments/{jobName}/pause":{"post":{"operationId":"ScaledJobPublicApiController_pauseScaledJobByName","parameters":[{"name":"jobName","required":true,"in":"path","description":"Name of the job","schema":{"maxLength":63,"example":"my-job","type":"string"}}],"responses":{"201":{"description":""},"401":{"description":"Unauthorized"}},"summary":"Pause job deployment","tags":["Serverless Jobs"]}},"/v1/job-deployments/{jobName}/resume":{"post":{"operationId":"ScaledJobPublicApiController_resumeScaledJobByName","parameters":[{"name":"jobName","required":true,"in":"path","description":"Name of the job","schema":{"maxLength":63,"example":"my-job","type":"string"}}],"responses":{"201":{"description":""},"401":{"description":"Unauthorized"}},"summary":"Resume job deployment","tags":["Serverless Jobs"]}},"/v1/job-deployments/{jobName}/status":{"get":{"operationId":"ScaledJobPublicApiController_getScaledJobStatusByName","parameters":[{"name":"jobName","required":true,"in":"path","description":"Name of the job","schema":{"maxLength":63,"example":"my-job","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetScaledJobStatusResponseDto"}}}},"401":{"description":"Unauthorized"}},"summary":"Get job deployment status","tags":["Serverless Jobs"]}},"/v1/container-deployments":{"get":{"operationId":"PublicApiController_getDeploymentsList","parameters":[],"responses":{"200":{"description":"Fetch a list of deployments","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentPublicApiResponseDto"}}}}},"401":{"description":"Unauthorized"}},"summary":"Get all deployments","tags":["Serverless Containers"]},"post":{"operationId":"PublicApiController_createNewDeployment","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentPublicApiDto"}}}},"responses":{"201":{"description":"Returns the created deployment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentPublicApiResponseDto"}}}},"401":{"description":"Unauthorized"}},"summary":"Create new deployment","tags":["Serverless Containers"]}},"/v1/container-deployments/{deployment_name}":{"get":{"operationId":"PublicApiController_getDeploymentByName","parameters":[{"name":"deployment_name","required":true,"in":"path","description":"Name of the deployment","schema":{"maxLength":63,"example":"my-deployment","type":"string"}}],"responses":{"200":{"description":"Fetch a deployment by name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentPublicApiResponseDto"}}}},"401":{"description":"Unauthorized"}},"summary":"Get deployment by name","tags":["Serverless Containers"]},"patch":{"operationId":"PublicApiController_updateDeploymentByName","parameters":[{"name":"deployment_name","required":true,"in":"path","description":"Name of the deployment","schema":{"maxLength":63,"example":"my-deployment","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchDeploymentPublicApiDto"}}}},"responses":{"200":{"description":"Returns the updated deployment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentPublicApiResponseDto"}}}},"401":{"description":"Unauthorized"}},"summary":"Update deployment","tags":["Serverless Containers"]},"delete":{"operationId":"PublicApiController_deleteDeploymentByName","parameters":[{"name":"deployment_name","required":true,"in":"path","description":"Name of the deployment","schema":{"maxLength":63,"example":"my-deployment","type":"string"}},{"name":"timeout","required":false,"in":"query","description":"Maximum time to wait for deployment deletion in milliseconds. Set to 0 to skip waiting.","schema":{"minimum":0,"maximum":300000,"format":"int32","default":60000,"example":60000,"type":"integer"}}],"responses":{"200":{"description":""},"401":{"description":"Unauthorized"}},"summary":"Delete deployment","tags":["Serverless Containers"]}},"/v1/container-deployments/{deployment_name}/status":{"get":{"operationId":"PublicApiController_getReplicasStatusByName","parameters":[{"name":"deployment_name","required":true,"in":"path","description":"Name of the deployment","schema":{"maxLength":63,"example":"my-deployment","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetDeploymentStatusResponseDto"}}}},"401":{"description":"Unauthorized"}},"summary":"Get deployment status","tags":["Serverless Containers"]}},"/v1/container-deployments/{deployment_name}/restart":{"post":{"operationId":"PublicApiController_restartDeploymentByName","parameters":[{"name":"deployment_name","required":true,"in":"path","description":"Name of the deployment","schema":{"maxLength":63,"example":"my-deployment","type":"string"}}],"responses":{"201":{"description":""},"401":{"description":"Unauthorized"}},"summary":"Restart deployment","tags":["Serverless Containers"]}},"/v1/container-deployments/{deployment_name}/scaling":{"get":{"operationId":"PublicApiController_getDeploymentScalingOptionsByName","parameters":[{"name":"deployment_name","required":true,"in":"path","description":"Name of the deployment","schema":{"maxLength":63,"example":"my-deployment","type":"string"}}],"responses":{"200":{"description":"Scaling options","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScalingOptionsPublicApiDto"}}}},"401":{"description":"Unauthorized"}},"summary":"Get deployment scaling options by deployment name","tags":["Serverless Containers"]},"patch":{"operationId":"PublicApiController_updateDeploymentScalingOptionsByName","parameters":[{"name":"deployment_name","required":true,"in":"path","description":"Name of the deployment","schema":{"maxLength":63,"example":"my-deployment","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchScalingOptionsPublicApiDto"}}}},"responses":{"202":{"description":"Accepted. Returns the requested scaling options. Reads can show the old values for a few seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScalingOptionsPublicApiDto"}}}},"400":{"description":"Invalid change, for example a gpu_utilization trigger on CPU compute."},"401":{"description":"Unauthorized"}},"summary":"Update deployment scaling options","tags":["Serverless Containers"]}},"/v1/container-deployments/{deployment_name}/replicas":{"get":{"operationId":"PublicApiController_getDeploymentReplicasByName","parameters":[{"name":"deployment_name","required":true,"in":"path","description":"Name of the deployment","schema":{"maxLength":63,"example":"my-deployment","type":"string"}}],"responses":{"200":{"description":"List of replicas","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplicasPublicApiDto"}}}},"401":{"description":"Unauthorized"}},"summary":"Get deployment replicas by deployment name","tags":["Serverless Containers"]}},"/v1/container-deployments/{deployment_name}/purge-queue":{"post":{"operationId":"PublicApiController_purgeQueue","parameters":[{"name":"deployment_name","required":true,"in":"path","description":"Name of the deployment","schema":{"maxLength":63,"example":"my-deployment","type":"string"}}],"responses":{"201":{"description":""},"401":{"description":"Unauthorized"}},"summary":"Purge deployment queue","tags":["Serverless Containers"]}},"/v1/container-deployments/{deployment_name}/pause":{"post":{"operationId":"PublicApiController_pauseDeploymentByName","parameters":[{"name":"deployment_name","required":true,"in":"path","description":"Name of the deployment","schema":{"maxLength":63,"example":"my-deployment","type":"string"}}],"responses":{"201":{"description":""},"401":{"description":"Unauthorized"}},"summary":"Pause deployment","tags":["Serverless Containers"]}},"/v1/container-deployments/{deployment_name}/resume":{"post":{"operationId":"PublicApiController_resumeDeploymentByName","parameters":[{"name":"deployment_name","required":true,"in":"path","description":"Name of the deployment","schema":{"maxLength":63,"example":"my-deployment","type":"string"}}],"responses":{"201":{"description":""},"401":{"description":"Unauthorized"}},"summary":"Resume deployment","tags":["Serverless Containers"]}},"/v1/container-deployments/{deployment_name}/environment-variables":{"get":{"operationId":"PublicApiController_getDeploymentEnvironmentVariables","parameters":[{"name":"deployment_name","required":true,"in":"path","description":"Name of the deployment","schema":{"maxLength":63,"example":"my-deployment","type":"string"}}],"responses":{"200":{"description":"Returns the environment variables for all containers of the deployment","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetDeploymentEnvVariablesPublicApiResponseDto"}}}}},"401":{"description":"Unauthorized"}},"summary":"Get deployment environment variables","tags":["Serverless Containers"]},"post":{"operationId":"PublicApiController_addEnvironmentVariablesToContainer","parameters":[{"name":"deployment_name","required":true,"in":"path","description":"Name of the deployment","schema":{"maxLength":63,"example":"my-deployment","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrPatchEnvironmentVariablesDto"}}}},"responses":{"201":{"description":"Returns the environment variables for the container","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetDeploymentEnvVariablesPublicApiResponseDto"}}}}},"401":{"description":"Unauthorized"}},"summary":"Add environment variables to a container","tags":["Serverless Containers"]},"patch":{"operationId":"PublicApiController_updateEnvironmentVariablesOfContainer","parameters":[{"name":"deployment_name","required":true,"in":"path","description":"Name of the deployment","schema":{"maxLength":63,"example":"my-deployment","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrPatchEnvironmentVariablesDto"}}}},"responses":{"200":{"description":"Returns the updated environment variables for the container","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetDeploymentEnvVariablesPublicApiResponseDto"}}}},"401":{"description":"Unauthorized"}},"summary":"Update environment variables of a container. The env vars must exist in order to update them","tags":["Serverless Containers"]},"delete":{"operationId":"PublicApiController_deleteEnvironmentVariablesOfContainer","parameters":[{"name":"deployment_name","required":true,"in":"path","description":"Name of the deployment","schema":{"maxLength":63,"example":"my-deployment","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteEnvironmentVariablesPublicApiDto"}}}},"responses":{"200":{"description":"Returns the remaining environment variables for the container","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetDeploymentEnvVariablesPublicApiResponseDto"}}}}},"401":{"description":"Unauthorized"}},"summary":"Delete environment variables of a container","tags":["Serverless Containers"]}},"/v1/serverless-compute-resources":{"get":{"operationId":"PublicApiController_getComputeAndAvailability","parameters":[],"responses":{"200":{"description":"A list of compute resources and their availability","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetComputeResourcesPublicApiResponseDto"}}}}},"401":{"description":"Unauthorized"}},"summary":"Get compute resource types and availability","tags":["Serverless Containers"]}},"/v1/secrets":{"get":{"operationId":"PublicApiController_getSecrets","parameters":[],"responses":{"200":{"description":"A list of secrets","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetSecretsPublicApiResponseDto"}}}}},"401":{"description":"Unauthorized"}},"summary":"Get secrets","tags":["Serverless Containers"]},"post":{"operationId":"PublicApiController_addSecret","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSecretPublicApiDto"}}}},"responses":{"201":{"description":""},"401":{"description":"Unauthorized"}},"summary":"Create new secret","tags":["Serverless Containers"]}},"/v1/secrets/{secret_name}":{"delete":{"description":"Will error if the secret is used in a deployment","operationId":"PublicApiController_deleteSecret","parameters":[{"name":"secret_name","required":true,"in":"path","schema":{"type":"string"}},{"name":"force","required":false,"in":"query","description":"Force delete the secret, even if it is used in deployments. Dangerous! may cause deployments to fail","schema":{"example":true,"type":"boolean"}}],"responses":{"200":{"description":""},"401":{"description":"Unauthorized"}},"summary":"Delete secret","tags":["Serverless Containers"]}},"/v1/file-secrets":{"get":{"description":"File secrets can be used as a secret mount storage","operationId":"PublicApiController_getFilesetSecrets","parameters":[],"responses":{"200":{"description":"A list of fileset secrets","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetFilesetSecretsPublicApiResponseDto"}}}}},"401":{"description":"Unauthorized"}},"summary":"Get fileset secrets","tags":["Serverless Containers"]},"post":{"description":"File secrets can be used as a secret mount storage","operationId":"PublicApiController_addFilesetSecret","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFilesetSecretPublicApiDto"}}}},"responses":{"201":{"description":""},"401":{"description":"Unauthorized"}},"summary":"Create new fileset secret","tags":["Serverless Containers"]}},"/v1/file-secrets/{secret_name}":{"delete":{"description":"Will error if the secret is used in a deployment","operationId":"PublicApiController_deleteFilesetSecret","parameters":[{"name":"secret_name","required":true,"in":"path","schema":{"type":"string"}},{"name":"force","required":false,"in":"query","description":"Force delete the secret, even if it is used in deployments. Dangerous! may cause deployments to fail","schema":{"example":true,"type":"boolean"}}],"responses":{"200":{"description":""},"401":{"description":"Unauthorized"}},"summary":"Delete fileset secret","tags":["Serverless Containers"]}},"/v1/container-registry-credentials":{"get":{"operationId":"PublicApiController_getRegistryCredentials","parameters":[],"responses":{"200":{"description":"A list of registry credentials","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetRegistryCredentialsPublicApiResponseDto"}}}}},"401":{"description":"Unauthorized"}},"summary":"Get all registry credentials","tags":["Serverless Containers"]},"post":{"operationId":"PublicApiController_addRegistryCredentials","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRegistryCredentialsPublicApiDto"}}}},"responses":{"201":{"description":""},"401":{"description":"Unauthorized"}},"summary":"Add registry credentials","tags":["Serverless Containers"]}},"/v1/container-registry-credentials/{credentials_name}":{"delete":{"operationId":"PublicApiController_deleteRegistryCredentials","parameters":[{"name":"credentials_name","required":true,"in":"path","schema":{"type":"string"}},{"name":"force","required":false,"in":"query","description":"Force delete the registry credentials, even if it is used in deployments. Dangerous! may cause deployments to fail","schema":{"example":true,"type":"boolean"}}],"responses":{"200":{"description":""},"401":{"description":"Unauthorized"}},"summary":"Delete registry credentials","tags":["Serverless Containers"]}},"/v1/container-deployment-templates":{"get":{"operationId":"ContainerDeploymentTemplatesPublicApiController_listTemplates","parameters":[],"responses":{"200":{"description":"Curated models with a ready serving configuration","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContainerDeploymentTemplatePublicApiDto"}}}}},"401":{"description":"Unauthorized"}},"summary":"List container deployment templates","tags":["Serverless Containers"]}},"/v1/container-deployment-templates/{template_id}":{"get":{"operationId":"ContainerDeploymentTemplatesPublicApiController_getTemplate","parameters":[{"name":"template_id","required":true,"in":"path","description":"Id of the template","schema":{"example":"qwen3-5-9b","type":"string"}}],"responses":{"200":{"description":"The template with its variants and features","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerDeploymentTemplateDetailPublicApiDto"}}}},"401":{"description":"Unauthorized"}},"summary":"Get a container deployment template","tags":["Serverless Containers"]}},"/v1/container-deployment-templates/{template_id}/deployments":{"post":{"operationId":"ContainerDeploymentTemplatesPublicApiController_deployTemplate","parameters":[{"name":"template_id","required":true,"in":"path","description":"Id of the template","schema":{"example":"qwen3-5-9b","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeployContainerDeploymentTemplatePublicApiDto"}}}},"responses":{"201":{"description":"Returns the created container deployment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentPublicApiResponseDto"}}}},"401":{"description":"Unauthorized"}},"summary":"Deploy a container deployment template","tags":["Serverless Containers"]}},"/v1/container-deployments/{deployment_name}/system-logs":{"get":{"description":"Fetch deployment system logs.","operationId":"DeploymentSystemLogsPublicApiController_getLogs","parameters":[{"name":"deployment_name","required":true,"in":"path","description":"Name of the deployment","schema":{"maxLength":63,"example":"my-deployment","type":"string"}},{"name":"reason","required":false,"in":"query","description":"Exact display reasons. An unknown reason returns no events.","schema":{"type":"array","items":{"type":"string"}}},{"name":"involved_object","required":false,"in":"query","description":"Exact involved object names.","schema":{"type":"array","items":{"type":"string"}}},{"name":"search_text","required":false,"in":"query","description":"Case-insensitive substring of the clean message, display reason and involved object. Whitespace is trimmed; blank search imposes no restriction.","schema":{"type":"string"}},{"name":"since","required":false,"in":"query","description":"Relative window such as 15m or 1d. Maximum range is 7 days. Blank time parameters use their defaults.","schema":{"default":"1d","type":"string"}},{"name":"start","required":false,"in":"query","description":"ISO 8601 or epoch time (s, ms, us or ns). Overrides since. Maximum range is 7 days.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"ISO 8601, epoch time (s, ms, us or ns), or now.","schema":{"default":"now"}},{"name":"order","required":false,"in":"query","description":"Timestamp order of the returned entries. Ascending does not reach events the request did not read.","schema":{"default":"desc","type":"string","enum":["asc","desc"]}},{"name":"limit","required":false,"in":"query","description":"Maximum number of entries to return. There is no paging: change the time range or the filters to reach other events.","schema":{"minimum":1,"maximum":1000,"format":"int32","default":50,"type":"integer"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SystemLogEntryPublicApiResponseDto"}}}}},"400":{"description":"Invalid query or deployment name"},"401":{"description":"Unauthorized"},"403":{"description":"Project access denied"},"404":{"description":"Deployment not found"}},"summary":"Get deployment system logs","tags":["Serverless Containers"]}},"/v1/job-deployments/{jobName}/system-logs":{"get":{"description":"Fetch job deployment system logs.","operationId":"JobSystemLogsPublicApiController_getLogs","parameters":[{"name":"jobName","required":true,"in":"path","description":"Name of the job","schema":{"maxLength":63,"example":"my-job","type":"string"}},{"name":"reason","required":false,"in":"query","description":"Exact display reasons. An unknown reason returns no events.","schema":{"type":"array","items":{"type":"string"}}},{"name":"involved_object","required":false,"in":"query","description":"Exact involved object names.","schema":{"type":"array","items":{"type":"string"}}},{"name":"search_text","required":false,"in":"query","description":"Case-insensitive substring of the clean message, display reason and involved object. Whitespace is trimmed; blank search imposes no restriction.","schema":{"type":"string"}},{"name":"since","required":false,"in":"query","description":"Relative window such as 15m or 1d. Maximum range is 7 days. Blank time parameters use their defaults.","schema":{"default":"1d","type":"string"}},{"name":"start","required":false,"in":"query","description":"ISO 8601 or epoch time (s, ms, us or ns). Overrides since. Maximum range is 7 days.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"ISO 8601, epoch time (s, ms, us or ns), or now.","schema":{"default":"now"}},{"name":"order","required":false,"in":"query","description":"Timestamp order of the returned entries. Ascending does not reach events the request did not read.","schema":{"default":"desc","type":"string","enum":["asc","desc"]}},{"name":"limit","required":false,"in":"query","description":"Maximum number of entries to return. There is no paging: change the time range or the filters to reach other events.","schema":{"minimum":1,"maximum":1000,"format":"int32","default":50,"type":"integer"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SystemLogEntryPublicApiResponseDto"}}}}},"400":{"description":"Invalid query or job name"},"401":{"description":"Unauthorized"},"403":{"description":"Project access denied"},"404":{"description":"Job deployment not found"}},"summary":"Get job deployment system logs","tags":["Serverless Jobs"]}}},"components":{"schemas":{"ModelPricingDto":{"type":"object","properties":{"input":{"type":"string","example":"0.0000014","description":"Price per input token, in the project owner billing currency"},"output":{"type":"string","example":"0.0000044","description":"Price per output token, in the project owner billing currency"},"cache_read":{"type":"string","example":"0.00000026","description":"Price per input token served from cache, in the project owner billing currency"},"cache_write":{"type":"string","example":"0.00000175","description":"Price per input token written to cache, in the project owner billing currency"},"image":{"type":"string","example":"0.015","description":"Price per input image, in the project owner billing currency"},"request":{"type":"string","example":"0.001","description":"Price per request on top of token charges, in the project owner billing currency"}}},"ModelServiceTierPricingDto":{"type":"object","properties":{"service_tier":{"type":"string","enum":["standard","flex","batch","fast"],"example":"standard","description":"The service tier these prices apply to"},"pricing":{"description":"Per-token prices for this service tier, in the project owner billing currency","allOf":[{"$ref":"#/components/schemas/ModelPricingDto"}]}},"required":["service_tier","pricing"]},"ModelDatacenterDto":{"type":"object","properties":{"country_code":{"type":"string","example":"FI","description":"ISO 3166-1 alpha-2 country code"}},"required":["country_code"]},"ModelReasoningDto":{"type":"object","properties":{"optional":{"type":"boolean","example":true,"description":"Whether reasoning can be disabled. False means every request pays for it"},"supported_efforts":{"example":["low","high","max"],"description":"Accepted effort levels, cheapest first","type":"array","items":{"type":"string"}},"default_effort":{"type":"object","example":"high","nullable":true,"description":"Effort applied when the request does not ask for one"}},"required":["optional","supported_efforts"]},"ModelSectionItemDto":{"type":"object","properties":{"title":{"type":"string","example":"Long-horizon coding","description":"Section heading"},"description":{"type":"string","example":"Sustains multi-step refactors across large repositories.","description":"Section body"}},"required":["title","description"]},"ModelBenchmarkIndexDto":{"type":"object","properties":{"label":{"type":"string","example":"Intelligence Index","description":"Index name"},"value":{"type":"number","example":51.1,"description":"Index score"},"better_than":{"type":"number","example":91,"description":"Percentage of compared models this model scores above"}},"required":["label","value","better_than"]},"ModelBenchmarkItemDto":{"type":"object","properties":{"name":{"type":"string","example":"GPQA Diamond","description":"Benchmark name"},"description":{"type":"string","example":"Graduate-level scientific reasoning","description":"What the benchmark measures"},"value":{"type":"number","example":89.5,"description":"Score as a percentage (0-100)"}},"required":["name","description","value"]},"ModelBenchmarkGroupDto":{"type":"object","properties":{"title":{"type":"string","example":"Reasoning","description":"Benchmark group title"},"items":{"description":"Benchmarks in this group","type":"array","items":{"$ref":"#/components/schemas/ModelBenchmarkItemDto"}}},"required":["title","items"]},"ModelBenchmarkComparisonRowDto":{"type":"object","properties":{"label":{"type":"string","example":"AIME 2025","description":"Benchmark name"},"values":{"example":[89.6,87.2,null],"description":"One score per entry in `columns`, in the same order. Null where a score was not published","type":"array","items":{"type":"string"}}},"required":["label","values"]},"ModelBenchmarkComparisonDto":{"type":"object","properties":{"columns":{"example":["Kimi K2.7 Code","Claude Opus 5","GPT-5.6"],"description":"Column headers. The first entry is this model","type":"array","items":{"type":"string"}},"rows":{"description":"One row per benchmark","type":"array","items":{"$ref":"#/components/schemas/ModelBenchmarkComparisonRowDto"}}},"required":["columns","rows"]},"ModelBenchmarksDto":{"type":"object","properties":{"indices":{"description":"Headline composite indices","type":"array","items":{"$ref":"#/components/schemas/ModelBenchmarkIndexDto"}},"groups":{"description":"Individual benchmarks, grouped by theme","type":"array","items":{"$ref":"#/components/schemas/ModelBenchmarkGroupDto"}},"comparison":{"nullable":true,"description":"Head-to-head comparison table","type":"object","allOf":[{"$ref":"#/components/schemas/ModelBenchmarkComparisonDto"}]}},"required":["indices","groups"]},"ModelResponseDto":{"type":"object","properties":{"code":{"type":"string","example":"kimi-k3","description":"Our catalog id for the model, and the `{code}` parameter of the single-model route"},"slug":{"type":"string","example":"moonshotai/kimi-k3","description":"Namespaced model identifier, derived as `<provider_id>/<code>`. Contains a slash, so it is not a route parameter"},"endpoint_model":{"type":"string","example":"moonshotai/Kimi-K3","description":"The id to send as `model` in an inference request. Usually the same as `code`, and always present"},"name":{"type":"string","example":"Kimi K3","description":"Display name of the model"},"provider_id":{"type":"string","example":"moonshotai","description":"Organization id (namespace) that produced the model; the leading segment of the slug"},"provider_name":{"type":"string","example":"Moonshot AI","description":"Organization name that produced the model"},"category":{"type":"string","enum":["text","image","audio","video","embedding","rerank"],"example":"text","description":"Catalog section the model belongs to"},"status":{"type":"string","enum":["coming_soon","beta","available"],"example":"available","description":"Lifecycle state of the model"},"accept_new_subscriptions":{"type":"boolean","example":true,"description":"Whether the model takes new subscriptions. False while it is out of capacity; existing subscriptions keep working"},"is_free":{"type":"boolean","example":false,"description":"Whether calls are free under every offered service tier"},"discount_to_user":{"type":"number","example":0.85,"description":"Fraction of the published price charged to end users. Below 1.0"},"dashboard_priority":{"type":"object","example":0,"nullable":true,"description":"Sort key for the catalog dashboard, ascending. Null sorts last, ties broken by name"},"tagline":{"type":"object","example":"Frontier reasoning + tool use","nullable":true,"description":"Short headline shown on a catalog card"},"description":{"type":"object","example":"Moonshot AI's flagship open-weights model for agentic work.","nullable":true,"description":"Long-form description"},"about":{"type":"object","example":"A 2.8T-parameter mixture-of-experts model that routes 16 of 896 experts per token.","nullable":true,"description":"Long-form \"About model\" copy"},"tags":{"example":["Reasoning","Chat","Code"],"description":"Capability labels shown as chips","type":"array","items":{"type":"string"}},"uses":{"example":["Agentic coding","Reasoning"],"description":"Suggested use cases","type":"array","items":{"type":"string"}},"logo_url":{"type":"object","example":"https://avatars.githubusercontent.com/u/129152888","nullable":true,"description":"Absolute URL of the model or provider logo. Consumers fall back to a generated tile when null"},"input_modalities":{"type":"array","example":["text","image"],"description":"Accepted input modalities","items":{"type":"string","enum":["text","image","file","audio","video","embeddings","rerank","speech","transcription"]}},"output_modalities":{"type":"array","example":["text"],"description":"Produced output modalities","items":{"type":"string","enum":["text","image","file","audio","video","embeddings","rerank","speech","transcription"]}},"supported_sampling_parameters":{"type":"array","example":["temperature","top_p"],"description":"Sampling parameters the model honours. Anything absent is rejected or ignored","items":{"type":"string","enum":["temperature","top_p","top_k","min_p","top_a","frequency_penalty","presence_penalty","repetition_penalty","stop","seed","max_tokens","logit_bias"]}},"supported_features":{"type":"array","example":["tools","json_mode"],"description":"Capabilities a client can branch on. Streaming is absent because it is always supported","items":{"type":"string","enum":["tools","json_mode","structured_outputs","logprobs","web_search","reasoning"]}},"pricing":{"description":"Per-token prices in the project owner billing currency. Empty when the model has no published rate","allOf":[{"$ref":"#/components/schemas/ModelPricingDto"}]},"service_tiers":{"type":"array","example":["standard"],"description":"Service tiers this model is served under, similar to OpenAI `service_tier`. Always includes `standard`","items":{"type":"string","enum":["standard","flex","batch","fast"]}},"service_tier_pricing":{"description":"Per-token prices in the project owner billing currency, broken down by service tier, one entry per value in `service_tiers` that has prices of its own. A tier without prices is left out","type":"array","items":{"$ref":"#/components/schemas/ModelServiceTierPricingDto"}},"created_at":{"format":"date-time","type":"string","example":"2026-07-25T08:00:00.000Z","description":"When the catalog entry was created"},"context_length":{"type":"number","example":1048576,"description":"Largest prompt the model accepts, in tokens"},"max_output_length":{"type":"number","example":131072,"description":"Largest completion the model will produce, in tokens"},"quantization":{"type":"string","enum":["int4","int8","fp4","mxfp4","nvfp4","fp6","fp8","mxfp8","fp16","bf16","fp32"],"description":"Weight quantisation this deployment is served at. Omitted, never guessed"},"capacity_tpm":{"type":"number","example":500000,"description":"Total tokens per minute of the deployment on the standard service tier, shared by all customers"},"capacity_rpm":{"type":"number","example":120,"description":"Total requests per minute of the deployment on the standard service tier, shared by all customers"},"request_rate_limit_per_min":{"type":"object","example":120,"nullable":true,"deprecated":true,"description":"Same value as `capacity_rpm`. Use `capacity_rpm` instead; per-project limits are returned by `GET /v1/inference/rate-limits`"},"datacenters":{"description":"Datacenters serving this deployment","type":"array","items":{"$ref":"#/components/schemas/ModelDatacenterDto"}},"total_parameters_b":{"type":"object","example":2800,"nullable":true,"description":"Total parameter count in billions"},"active_parameters_b":{"type":"object","example":40,"nullable":true,"description":"Parameters activated per token, in billions"},"tokenizer":{"type":"object","example":"Moonshot","nullable":true,"description":"Tokenizer family, used to estimate cost before calling"},"hugging_face_id":{"type":"string","example":"moonshotai/Kimi-K3","description":"Hugging Face repository holding the weights. Published for open-weights models so consumers can dedupe us against other hosts of the same model"},"weights_url":{"type":"object","example":"https://huggingface.co/moonshotai/Kimi-K3","nullable":true,"description":"Where the weights can be downloaded"},"license":{"type":"object","example":"MIT","nullable":true,"description":"Weight license"},"license_url":{"type":"object","example":"https://opensource.org/license/mit","nullable":true,"description":"Full license text"},"release_date":{"type":"object","example":"2026-07-15","nullable":true,"description":"Release date of this model version (YYYY-MM-DD), when the model was released to the public by the provider."},"knowledge_cutoff":{"type":"object","example":"2026-02-16","nullable":true,"description":"Training data cutoff (YYYY-MM-DD)"},"deprecation_date":{"type":"string","example":"2027-01-31","description":"When the model stops being served (YYYY-MM-DD). Absent unless a retirement has been announced"},"replacement_code":{"type":"object","example":"kimi-k4","nullable":true,"description":"Code of the model that supersedes this one"},"reasoning":{"nullable":true,"description":"Reasoning controls, when the model reasons at all","type":"object","allOf":[{"$ref":"#/components/schemas/ModelReasoningDto"}]},"capabilities":{"nullable":true,"description":"Key capabilities, when published","type":"array","items":{"$ref":"#/components/schemas/ModelSectionItemDto"}},"benchmarks":{"nullable":true,"description":"Published benchmark scores, when available","type":"object","allOf":[{"$ref":"#/components/schemas/ModelBenchmarksDto"}]},"updated_at":{"format":"date-time","type":"string","example":"2026-07-30T09:12:44.000Z","description":"When the catalog entry was last edited"}},"required":["code","slug","endpoint_model","name","provider_id","provider_name","category","status","accept_new_subscriptions","is_free","dashboard_priority","tagline","description","about","tags","uses","logo_url","input_modalities","output_modalities","supported_sampling_parameters","supported_features","pricing","service_tiers","service_tier_pricing","created_at","request_rate_limit_per_min","total_parameters_b","active_parameters_b","tokenizer","weights_url","license","license_url","release_date","knowledge_cutoff","replacement_code","reasoning","capabilities","benchmarks","updated_at"]},"ModelsResponseDto":{"type":"object","properties":{"data":{"description":"One entry per catalog model","type":"array","items":{"$ref":"#/components/schemas/ModelResponseDto"}}},"required":["data"]},"ModelQuotaDto":{"type":"object","properties":{"rpm":{"type":"object","example":60,"nullable":true,"description":"Requests per minute. Null for the batch service tier"},"tpm":{"type":"object","example":100000,"nullable":true,"description":"Tokens per minute. Null for the batch service tier"},"max_enqueued_tokens":{"type":"object","example":null,"nullable":true,"description":"Tokens that can be queued at once. Set only for the batch service tier"}},"required":["rpm","tpm","max_enqueued_tokens"]},"ModelServiceTierQuotaDto":{"type":"object","properties":{"service_tier":{"type":"string","enum":["standard","flex","batch","fast"],"example":"standard","description":"The service tier this quota applies to"},"quota":{"description":"Rate limits of the project for this model on this service tier","allOf":[{"$ref":"#/components/schemas/ModelQuotaDto"}]}},"required":["service_tier","quota"]},"ModelDetailResponseDto":{"type":"object","properties":{"code":{"type":"string","example":"kimi-k3","description":"Our catalog id for the model, and the `{code}` parameter of the single-model route"},"slug":{"type":"string","example":"moonshotai/kimi-k3","description":"Namespaced model identifier, derived as `<provider_id>/<code>`. Contains a slash, so it is not a route parameter"},"endpoint_model":{"type":"string","example":"moonshotai/Kimi-K3","description":"The id to send as `model` in an inference request. Usually the same as `code`, and always present"},"name":{"type":"string","example":"Kimi K3","description":"Display name of the model"},"provider_id":{"type":"string","example":"moonshotai","description":"Organization id (namespace) that produced the model; the leading segment of the slug"},"provider_name":{"type":"string","example":"Moonshot AI","description":"Organization name that produced the model"},"category":{"type":"string","enum":["text","image","audio","video","embedding","rerank"],"example":"text","description":"Catalog section the model belongs to"},"status":{"type":"string","enum":["coming_soon","beta","available"],"example":"available","description":"Lifecycle state of the model"},"accept_new_subscriptions":{"type":"boolean","example":true,"description":"Whether the model takes new subscriptions. False while it is out of capacity; existing subscriptions keep working"},"is_free":{"type":"boolean","example":false,"description":"Whether calls are free under every offered service tier"},"discount_to_user":{"type":"number","example":0.85,"description":"Fraction of the published price charged to end users. Below 1.0"},"dashboard_priority":{"type":"object","example":0,"nullable":true,"description":"Sort key for the catalog dashboard, ascending. Null sorts last, ties broken by name"},"tagline":{"type":"object","example":"Frontier reasoning + tool use","nullable":true,"description":"Short headline shown on a catalog card"},"description":{"type":"object","example":"Moonshot AI's flagship open-weights model for agentic work.","nullable":true,"description":"Long-form description"},"about":{"type":"object","example":"A 2.8T-parameter mixture-of-experts model that routes 16 of 896 experts per token.","nullable":true,"description":"Long-form \"About model\" copy"},"tags":{"example":["Reasoning","Chat","Code"],"description":"Capability labels shown as chips","type":"array","items":{"type":"string"}},"uses":{"example":["Agentic coding","Reasoning"],"description":"Suggested use cases","type":"array","items":{"type":"string"}},"logo_url":{"type":"object","example":"https://avatars.githubusercontent.com/u/129152888","nullable":true,"description":"Absolute URL of the model or provider logo. Consumers fall back to a generated tile when null"},"input_modalities":{"type":"array","example":["text","image"],"description":"Accepted input modalities","items":{"type":"string","enum":["text","image","file","audio","video","embeddings","rerank","speech","transcription"]}},"output_modalities":{"type":"array","example":["text"],"description":"Produced output modalities","items":{"type":"string","enum":["text","image","file","audio","video","embeddings","rerank","speech","transcription"]}},"supported_sampling_parameters":{"type":"array","example":["temperature","top_p"],"description":"Sampling parameters the model honours. Anything absent is rejected or ignored","items":{"type":"string","enum":["temperature","top_p","top_k","min_p","top_a","frequency_penalty","presence_penalty","repetition_penalty","stop","seed","max_tokens","logit_bias"]}},"supported_features":{"type":"array","example":["tools","json_mode"],"description":"Capabilities a client can branch on. Streaming is absent because it is always supported","items":{"type":"string","enum":["tools","json_mode","structured_outputs","logprobs","web_search","reasoning"]}},"pricing":{"description":"Per-token prices in the project owner billing currency. Empty when the model has no published rate","allOf":[{"$ref":"#/components/schemas/ModelPricingDto"}]},"service_tiers":{"type":"array","example":["standard"],"description":"Service tiers this model is served under, similar to OpenAI `service_tier`. Always includes `standard`","items":{"type":"string","enum":["standard","flex","batch","fast"]}},"service_tier_pricing":{"description":"Per-token prices in the project owner billing currency, broken down by service tier, one entry per value in `service_tiers` that has prices of its own. A tier without prices is left out","type":"array","items":{"$ref":"#/components/schemas/ModelServiceTierPricingDto"}},"created_at":{"format":"date-time","type":"string","example":"2026-07-25T08:00:00.000Z","description":"When the catalog entry was created"},"context_length":{"type":"number","example":1048576,"description":"Largest prompt the model accepts, in tokens"},"max_output_length":{"type":"number","example":131072,"description":"Largest completion the model will produce, in tokens"},"quantization":{"type":"string","enum":["int4","int8","fp4","mxfp4","nvfp4","fp6","fp8","mxfp8","fp16","bf16","fp32"],"description":"Weight quantisation this deployment is served at. Omitted, never guessed"},"capacity_tpm":{"type":"number","example":500000,"description":"Total tokens per minute of the deployment on the standard service tier, shared by all customers"},"capacity_rpm":{"type":"number","example":120,"description":"Total requests per minute of the deployment on the standard service tier, shared by all customers"},"request_rate_limit_per_min":{"type":"object","example":120,"nullable":true,"deprecated":true,"description":"Same value as `capacity_rpm`. Use `capacity_rpm` instead; per-project limits are returned by `GET /v1/inference/rate-limits`"},"datacenters":{"description":"Datacenters serving this deployment","type":"array","items":{"$ref":"#/components/schemas/ModelDatacenterDto"}},"total_parameters_b":{"type":"object","example":2800,"nullable":true,"description":"Total parameter count in billions"},"active_parameters_b":{"type":"object","example":40,"nullable":true,"description":"Parameters activated per token, in billions"},"tokenizer":{"type":"object","example":"Moonshot","nullable":true,"description":"Tokenizer family, used to estimate cost before calling"},"hugging_face_id":{"type":"string","example":"moonshotai/Kimi-K3","description":"Hugging Face repository holding the weights. Published for open-weights models so consumers can dedupe us against other hosts of the same model"},"weights_url":{"type":"object","example":"https://huggingface.co/moonshotai/Kimi-K3","nullable":true,"description":"Where the weights can be downloaded"},"license":{"type":"object","example":"MIT","nullable":true,"description":"Weight license"},"license_url":{"type":"object","example":"https://opensource.org/license/mit","nullable":true,"description":"Full license text"},"release_date":{"type":"object","example":"2026-07-15","nullable":true,"description":"Release date of this model version (YYYY-MM-DD), when the model was released to the public by the provider."},"knowledge_cutoff":{"type":"object","example":"2026-02-16","nullable":true,"description":"Training data cutoff (YYYY-MM-DD)"},"deprecation_date":{"type":"string","example":"2027-01-31","description":"When the model stops being served (YYYY-MM-DD). Absent unless a retirement has been announced"},"replacement_code":{"type":"object","example":"kimi-k4","nullable":true,"description":"Code of the model that supersedes this one"},"reasoning":{"nullable":true,"description":"Reasoning controls, when the model reasons at all","type":"object","allOf":[{"$ref":"#/components/schemas/ModelReasoningDto"}]},"capabilities":{"nullable":true,"description":"Key capabilities, when published","type":"array","items":{"$ref":"#/components/schemas/ModelSectionItemDto"}},"benchmarks":{"nullable":true,"description":"Published benchmark scores, when available","type":"object","allOf":[{"$ref":"#/components/schemas/ModelBenchmarksDto"}]},"updated_at":{"format":"date-time","type":"string","example":"2026-07-30T09:12:44.000Z","description":"When the catalog entry was last edited"},"quota_tier":{"type":"number","example":1,"description":"The project owner's inference tier, which sets the quotas below"},"quota_rpm":{"type":"number","example":60,"description":"Requests per minute of the project for this model on the standard service tier. 0 when standard is not available on this tier"},"quota_tpm":{"type":"number","example":100000,"description":"Tokens per minute of the project for this model on the standard service tier. 0 when standard is not available on this tier"},"service_tier_quota":{"description":"Rate limits of the project per service tier, one entry per value in `service_tiers` available on this tier. Each project has its own quota","type":"array","items":{"$ref":"#/components/schemas/ModelServiceTierQuotaDto"}}},"required":["code","slug","endpoint_model","name","provider_id","provider_name","category","status","accept_new_subscriptions","is_free","dashboard_priority","tagline","description","about","tags","uses","logo_url","input_modalities","output_modalities","supported_sampling_parameters","supported_features","pricing","service_tiers","service_tier_pricing","created_at","request_rate_limit_per_min","total_parameters_b","active_parameters_b","tokenizer","weights_url","license","license_url","release_date","knowledge_cutoff","replacement_code","reasoning","capabilities","benchmarks","updated_at","quota_tier","quota_rpm","quota_tpm","service_tier_quota"]},"InferenceUsageRowDto":{"type":"object","properties":{"requests":{"type":"number","example":42},"input_tokens":{"type":"number","example":120000,"description":"Uncached prompt tokens"},"cache_read_tokens":{"type":"number","example":980000,"description":"Prompt tokens served from cache"},"output_tokens":{"type":"number","example":15000},"day":{"type":"string","example":"2026-09-16","description":"UTC calendar day"},"model":{"type":"string","example":"kimi-k3"}},"required":["requests","input_tokens","cache_read_tokens","output_tokens","day","model"]},"InferenceUsageTotalsDto":{"type":"object","properties":{"requests":{"type":"number","example":42},"input_tokens":{"type":"number","example":120000,"description":"Uncached prompt tokens"},"cache_read_tokens":{"type":"number","example":980000,"description":"Prompt tokens served from cache"},"output_tokens":{"type":"number","example":15000}},"required":["requests","input_tokens","cache_read_tokens","output_tokens"]},"InferenceUsageRangeDto":{"type":"object","properties":{"start":{"type":"string","example":"2026-08-17T12:00:00.000Z"},"end":{"type":"string","example":"2026-09-16T12:00:00.000Z"}},"required":["start","end"]},"InferenceUsageResponseDto":{"type":"object","properties":{"rows":{"description":"One row per (day, model), newest day first","type":"array","items":{"$ref":"#/components/schemas/InferenceUsageRowDto"}},"totals":{"$ref":"#/components/schemas/InferenceUsageTotalsDto"},"range":{"$ref":"#/components/schemas/InferenceUsageRangeDto"}},"required":["rows","totals","range"]},"InferenceRateLimitResponseDto":{"type":"object","properties":{"model_code":{"type":"string","example":"kimi-k3","description":"The model code"},"service_tier":{"type":"string","enum":["standard","flex","batch","fast"],"description":"Service tier the limit applies to"},"rpm":{"type":"object","example":60,"nullable":true,"description":"Requests per minute. Null for the batch service tier"},"tpm":{"type":"object","example":100000,"nullable":true,"description":"Tokens per minute. Null for the batch service tier"},"max_enqueued_tokens":{"type":"object","example":null,"nullable":true,"description":"Tokens that can be queued at once. Set only for the batch service tier"}},"required":["model_code","service_tier","rpm","tpm","max_enqueued_tokens"]},"InferenceRateLimitsResponseDto":{"type":"object","properties":{"tier":{"type":"number","example":1,"description":"The project owner's inference tier"},"rate_limits":{"description":"Limits of this project, one entry per model and service tier it may use. Other projects of the same owner have their own, separate limits","type":"array","items":{"$ref":"#/components/schemas/InferenceRateLimitResponseDto"}}},"required":["tier","rate_limits"]},"InferenceTierResponseDto":{"type":"object","properties":{"tier":{"type":"number","example":1,"description":"The inference tier"},"rate_limits":{"description":"Limits this tier applies to projects, one entry per model and service tier","type":"array","items":{"$ref":"#/components/schemas/InferenceRateLimitResponseDto"}}},"required":["tier","rate_limits"]},"InferenceSubscriptionResponseDto":{"type":"object","properties":{"project_id":{"type":"string","format":"uuid"},"model_code":{"type":"string","example":"kimi-k3"},"service_tier":{"type":"string","enum":["standard","flex","batch","fast"]},"quota_tier":{"type":"number","example":1,"description":"The project owner's inference tier when subscribing"},"rpm":{"type":"object","example":60,"nullable":true,"description":"Requests per minute currently applied to the project for this model and service tier. Overrides are taken into account."},"tpm":{"type":"object","example":100000,"nullable":true,"description":"Tokens per minute currently applied to the project for this model and service tier. Overrides are taken into account."},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["project_id","model_code","service_tier","quota_tier","rpm","tpm","created_at","updated_at"]},"InferenceSuspendReason":{"type":"string","enum":["insufficient_balance","by_admin","unknown"],"description":"Why inference was suspended. `by_admin` means Verda suspended it by hand. Null while active"},"InferenceTenantStatusResponseDto":{"type":"object","properties":{"status":{"type":"string","enum":["active","suspended"],"description":"Whether the project can use inference. While suspended, inference requests are refused and the project cannot subscribe; its subscriptions are kept"},"is_manual_suspend":{"type":"boolean","description":"Whether Verda suspended inference by hand. False while active and when inference was suspended automatically"},"suspend_reason":{"nullable":true,"description":"Why inference was suspended. `by_admin` means Verda suspended it by hand. Null while active","allOf":[{"$ref":"#/components/schemas/InferenceSuspendReason"}]},"public_comment":{"type":"string","nullable":true,"example":"Continuous misuse of inference","description":"Explanation shown to the project members when Verda suspended inference by hand. Null otherwise and when none is given"},"has_minimum_balance":{"type":"boolean","description":"Whether the project balance, including its credit limit, reaches the minimum needed to subscribe to inference models. Subscribing without it answers 402; existing subscriptions keep working"}},"required":["status","is_manual_suspend","suspend_reason","public_comment","has_minimum_balance"]},"CreatePrivateNetworkDto":{"type":"object","properties":{"name":{"type":"string","example":"prod-net","description":"Private network name (unique within the project). The network is global — its subnets are per-location."},"mode":{"type":"string","enum":["auto","custom"],"default":"custom"},"is_default":{"type":"boolean","default":false}},"required":["name"]},"PrivateNetworkResponseDto":{"type":"object","properties":{"id":{"type":"string","example":"pn_d90ky5tk"},"name":{"type":"string","example":"prod-net"},"mode":{"type":"string","enum":["auto","custom"],"description":"`auto`: subnets are created per location on first use. `custom`: you create them."},"is_default":{"type":"boolean","description":"The network a deploy attaches to when it names neither `network` nor `subnet`"},"created_by_user_id":{"type":"string","example":"7dfc2631-0158-4f74-93f6-6b46dcb90fef","description":"Who created the network"},"created_at":{"format":"date-time","type":"string"}},"required":["id","name","mode","is_default","created_by_user_id","created_at"]},"Location":{"type":"object","properties":{"code":{"type":"string","example":"FIN-01","description":"Datacenter location code"},"name":{"type":"string","example":"Finland 1","description":"Location name"},"country_code":{"type":"string","example":"FI","description":"Country code"}},"required":["code","name","country_code"]},"PrivateNetworkWorkloadResponseDto":{"type":"object","properties":{"id":{"type":"string","example":"7dfc2631-0158-4f74-93f6-6b46dcb90fef"},"subnet_id":{"type":"string","example":"sn_82gp8jck","description":"Subnet this instance draws its address from"},"location":{"example":{"code":"FIN-01","name":"Finland 1","country_code":"FI"},"description":"Datacenter it runs in — the subnet's","allOf":[{"$ref":"#/components/schemas/Location"}]},"hostname":{"type":"string","example":"hazy-star-swims-fin-01"},"status":{"type":"string","example":"running","enum":["running","provisioning","offline","discontinued","unknown","ordered","notfound","new","error","deleting","validating","no_capacity","installation_failed"]},"model":{"type":"object","example":{"code":"L40S","name":"NVIDIA L40S","category":"GPU","manufacturer":"NVIDIA","cluster_model_code":null}},"template":{"type":"object","example":{"instance_type":"CPU.4V","cpu_cores":4,"cpu_model":"AMD Turin","gpu_number":0,"gpu_vram_gb":0,"ram_gb":22}},"private_ip":{"type":"string","example":"10.0.0.5","description":"Address on the private network"},"public_ip":{"type":"object","example":"203.0.113.5","nullable":true,"description":"Public address, null when it has none"},"created_at":{"format":"date-time","type":"string"},"created_by_user_id":{"type":"object","example":"7dfc2631-0158-4f74-93f6-6b46dcb90fef","nullable":true}},"required":["id","subnet_id","location","hostname","status","model","template","private_ip","public_ip","created_at","created_by_user_id"]},"UpdatePrivateNetworkDto":{"type":"object","properties":{"name":{"type":"string","example":"prod-net","description":"Private network name (unique within the project)"},"is_default":{"type":"boolean","description":"The network a deploy attaches to when it names neither `network` nor `subnet`"}}},"CreateSubnetDto":{"type":"object","properties":{"location_code":{"type":"string","example":"FIN-01","description":"Datacenter location code this subnet lives in"},"name":{"type":"string","example":"workers"},"cidr":{"type":"string","example":"10.0.0.0/24","description":"IPv4 CIDR the workload overlay IPs are allocated from"},"is_default":{"type":"boolean","description":"Default subnet for this datacenter. Defaults to true for the first subnet in a datacenter."}},"required":["location_code","name","cidr"]},"AttachedInstanceResponseDto":{"type":"object","properties":{"id":{"type":"string","example":"7dfc2631-0158-4f74-93f6-6b46dcb90fef"},"hostname":{"type":"string","example":"hazy-star-swims-fin-01"},"private_ip":{"type":"string","example":"10.0.0.5","description":"Address on the private network"},"public_ip":{"type":"object","example":"203.0.113.5","nullable":true,"description":"Public address, null when the instance has none"},"status":{"type":"string","example":"running","enum":["running","provisioning","offline","discontinued","unknown","ordered","notfound","new","error","deleting","validating","no_capacity","installation_failed"],"description":"The instance's lifecycle status"}},"required":["id","hostname","private_ip","public_ip","status"]},"SubnetResponseDto":{"type":"object","properties":{"id":{"type":"string","example":"sn_82gp8jck"},"location":{"example":{"code":"FIN-01","name":"Finland 1","country_code":"FI"},"description":"Datacenter this subnet lives in","allOf":[{"$ref":"#/components/schemas/Location"}]},"name":{"type":"string","example":"workers"},"cidr":{"type":"string","example":"10.0.0.0/24"},"is_default":{"type":"boolean","description":"The subnet a deploy takes when it names this network but no subnet, in this datacenter"},"used_ip_count":{"type":"number","example":3,"description":"Addresses in this subnet currently held by an instance"},"total_ip_count":{"type":"number","example":254,"description":"Addresses this subnet can hand out in total"},"default_route_instance":{"nullable":true,"description":"Instance carrying this subnet’s internet traffic; null when it has no default route","type":"object","allOf":[{"$ref":"#/components/schemas/AttachedInstanceResponseDto"}]},"created_by_user_id":{"type":"string","example":"7dfc2631-0158-4f74-93f6-6b46dcb90fef","description":"Who created the subnet"},"created_at":{"format":"date-time","type":"string"}},"required":["id","location","name","cidr","is_default","used_ip_count","total_ip_count","default_route_instance","created_by_user_id","created_at"]},"UpdateSubnetDto":{"type":"object","properties":{"name":{"type":"string","example":"workers"},"is_default":{"type":"boolean","description":"Default subnet for this datacenter"}}},"CreateRouteDto":{"type":"object","properties":{"destination":{"type":"string","example":"0.0.0.0/0","description":"Where this traffic is going. Only `0.0.0.0/0` (the internet) is supported for now."},"instance_id":{"type":"string","description":"Instance to route the traffic through. It must be in the subnet's datacenter and have a public IP."}},"required":["destination","instance_id"]},"RouteResponseDto":{"type":"object","properties":{"id":{"type":"string","example":"rt_82gp8jck"},"subnet_id":{"type":"string","example":"sn_82gp8jck","description":"Subnet whose traffic this route applies to"},"location":{"example":{"code":"FIN-01","name":"Finland 1","country_code":"FI"},"description":"Datacenter this route applies in — the subnet's","allOf":[{"$ref":"#/components/schemas/Location"}]},"instance":{"nullable":true,"description":"The instance the traffic goes through","type":"object","allOf":[{"$ref":"#/components/schemas/AttachedInstanceResponseDto"}]},"destination":{"type":"string","example":"0.0.0.0/0","description":"Where this traffic is going"},"created_by_user_id":{"type":"string","example":"7dfc2631-0158-4f74-93f6-6b46dcb90fef"},"created_at":{"format":"date-time","type":"string"}},"required":["id","subnet_id","location","instance","destination","created_by_user_id","created_at"]},"CreatePrivateNetworkAddressMappingDto":{"type":"object","properties":{"service":{"type":"string","example":"mk8s"},"location_code":{"type":"string","example":"FIN-01"},"source_private_network_id":{"type":"string","example":"pn_4hs96f02"},"source_cidr":{"type":"string","example":"10.0.1.0/24"},"target_private_network_id":{"type":"string","example":"pn_d90ky5tk"},"target_cidr":{"type":"string","example":"10.100.1.0/24"}},"required":["service","location_code","source_private_network_id","source_cidr","target_private_network_id","target_cidr"]},"PrivateNetworkAddressMappingResponseDto":{"type":"object","properties":{"id":{"type":"string","example":"am_rh9sph53"},"service":{"type":"string","example":"mk8s"},"location":{"example":{"code":"FIN-01","name":"Finland 1","country_code":"FI"},"description":"Datacenter this mapping applies in","allOf":[{"$ref":"#/components/schemas/Location"}]},"source_private_network_id":{"type":"string","example":"pn_4hs96f02","description":"Network containing the original addresses"},"source_cidr":{"type":"string","example":"10.0.1.0/24","description":"Original IPv4 prefix in the source network"},"target_private_network_id":{"type":"string","example":"pn_d90ky5tk","description":"Network in which the mapped addresses are reachable"},"target_cidr":{"type":"string","example":"10.100.1.0/24","description":"IPv4 prefix representing the source addresses in the target network"},"created_at":{"format":"date-time","type":"string"}},"required":["id","service","location","source_private_network_id","source_cidr","target_private_network_id","target_cidr","created_at"]},"CreatePrivateNetworkEndpointBindingDto":{"type":"object","properties":{"service":{"type":"string","example":"mk8s"},"source_private_network_id":{"type":"string","example":"pn_4hs96f02"},"endpoint_ip":{"type":"string","example":"1.2.3.4","description":"IPv4 address clients dial"},"target_workload_id":{"type":"string","example":"11111111-1111-1111-1111-111111111111","description":"Target workload; determines the location and target network"}},"required":["service","source_private_network_id","endpoint_ip","target_workload_id"]},"PrivateNetworkEndpointBindingResponseDto":{"type":"object","properties":{"id":{"type":"string","example":"epb_4hs96f02"},"endpoint_id":{"type":"string","example":"ep_d90ky5tk"},"service":{"type":"string","example":"mk8s"},"source_private_network_id":{"type":"string","example":"pn_4hs96f02","description":"Network authorized to use the endpoint"},"endpoint_ip":{"type":"string","example":"1.2.3.4","description":"IPv4 address clients dial"},"target_kind":{"type":"string","enum":["workload"],"example":"workload"},"target_workload_id":{"type":"string","example":"11111111-1111-1111-1111-111111111111"},"target_private_network_id":{"type":"string","example":"pn_d90ky5tk","description":"Network containing the target workload"},"target_overlay_ip":{"type":"string","example":"10.0.2.2","description":"Target workload overlay IPv4 address"},"location":{"example":{"code":"FIN-01","name":"Finland 1","country_code":"FI"},"description":"Datacenter containing the target workload","allOf":[{"$ref":"#/components/schemas/Location"}]},"created_at":{"format":"date-time","type":"string"}},"required":["id","endpoint_id","service","source_private_network_id","endpoint_ip","target_kind","target_workload_id","target_private_network_id","target_overlay_ip","location","created_at"]},"GetAccessTokenDto":{"type":"object","properties":{"grant_type":{"type":"string","enum":["client_credentials","refresh_token"],"example":"client_credentials"},"client_id":{"type":"string","example":"6a51jsgnISg6JOyE7wYZh"},"client_secret":{"type":"string","example":"TvSBFujsqloJb4Jbcezths1OPK9my3zodM3zot9Fn5"}},"required":["grant_type","client_id","client_secret"]},"RefreshAccessTokenPublicApiDto":{"type":"object","properties":{"grant_type":{"type":"string","enum":["client_credentials","refresh_token"],"example":"refresh_token"},"refresh_token":{"type":"string","example":"OU4O2BwA690cKg2OfGS8pgIfGSTD2vJ..."}},"required":["grant_type","refresh_token"]},"GetAccessTokenResponseDto":{"type":"object","properties":{"access_token":{"type":"string","example":"eyJhbGciOiJIUzI1NiI...","description":"Access token value"},"token_type":{"type":"string","example":"Bearer","description":"Token type"},"expires_in":{"type":"number","example":3600,"description":"Token expiration time in seconds"},"refresh_token":{"type":"string","example":"OU4O2BwA690cKg2OfGS8pgIfGSTD2vJ...","description":"Refresh token value"},"scope":{"type":"string","example":"cloud-api-v1","description":"Access scope"}},"required":["access_token","token_type","expires_in","refresh_token","scope"]},"PublicApiErrorResponseDto":{"type":"object","properties":{"code":{"type":"string","example":"invalid_request","enum":["invalid_request","unauthorized_request","insufficient_funds","forbidden_action","not_found","conflict","server_error","service_unavailable"]},"message":{"type":"string","description":"Error message"}},"required":["code","message"]},"BalanceResponseDto":{"type":"object","properties":{"amount":{"type":"number","description":"Project balance","example":1000},"currency":{"type":"string","enum":["usd","eur"],"default":"usd","description":"Currency type","example":"usd"}},"required":["amount","currency"]},"Os":{"type":"object","properties":{"id":{"type":"string","description":"Image id","example":"cff5910e-fc0d-4cd1-9476-4362412fc066"},"image_type":{"type":"string","description":"Image type","example":"ubuntu-24.04"},"name":{"type":"string","description":"Image name","example":"Ubuntu 24.04"},"is_default":{"type":"boolean","description":"Is default image","example":false},"details":{"description":"Image details","example":["Ubuntu 24.04","Minimal Image"],"type":"array","items":{"type":"string"}},"category":{"type":"string","description":"Image category","example":"ubuntu"},"is_cluster":{"type":"boolean","description":"Is cluster","example":false}},"required":["id","image_type","name","is_default","details","category","is_cluster"]},"AuditLogResponseDto":{"type":"object","properties":{"specversion":{"type":"string","example":"1.0","description":"The version of the CloudEvents specification that the event uses."},"id":{"type":"string","example":"log_033FNaNcc0AtphhH71DLBW"},"source":{"type":"string","example":"https://api.verda.com/project/d6e7f8a9-b0c1-2345-defa-456789012345"},"type":{"type":"string","example":"com.verda.api.cloud.compute.create.v1","description":"The type of event that occurred, as `com.verda.api.<producer>.<object_type>.<action>.v1`."},"subject":{"type":"string","example":"7bdb4161-c7d2-478c-9850-05719adc8381","description":"This identifies the subject of the event in the context of the event producer. Typically it is ID of the object that the event is related to."},"time":{"type":"string","example":"2026-03-17T14:15:52.872Z","description":"The time the event occurred."},"data":{"type":"object","description":"The data of the event, varies for different object types. For the subject of the event, the corresponding object is embedded; other related objects are referenced by ID.","example":{"location_code":"FIN-01","request_origin":"console-11.17.0","actor_id":"5bbb59cb-fced-44a4-85c6-5005e7480a8f","compute":{"id":"7bdb4161-c7d2-478c-9850-05719adc8381","hostname":"tiny-tree-unfolds-fin-01","instance_type":"CPU.4V.16G","is_cluster":false,"ip":"1.1.1.1","os_volume_id":"a6e77869-5012-42c0-b98e-792b4ba2cad9","location_code":"FIN-01"}}}},"required":["specversion","id","source","type","subject","time","data"]},"GetAuditLogResponseListDto":{"type":"object","properties":{"data":{"description":"List of audit log events","type":"array","items":{"$ref":"#/components/schemas/AuditLogResponseDto"}},"cursor":{"type":"string","example":"log_033FNaNcc0AtphhH71DLBW","description":"Cursor for next page, if there are more results"}},"required":["data"]},"DownloadAuditLogParamsDto":{"type":"object","properties":{"action":{"type":"string","enum":["other","create","start","start_complete","shutdown_complete","shutdown","delete","delete_complete","attach","attach_complete","detach","detach_complete","clone","resize","rename","transfer","trash","trash_complete","restore","cancel","provisioning","running","configure_spot","authenticate","expire","accept","update_role","revoke","login","logout","login_failed","auth_mfa_enable","auth_mfa_disable","auth_mfa_challenge","auth_mfa_verify","password_reset","complete","redeem","suspend","unsuspend","approve","decline","update","rotate_secret","disable","enable"],"description":"Filter by action type"},"object_type":{"type":"string","enum":["compute","volume","ssh_key","invite","user","member","cloud_api_credential","object_storage_bucket","object_storage_key_pair","custom_image","startup_script","topup","coupon","bank_transfer","bank_transfer_account","balance","other","object_storage","quota_request","webhook","auto_top_up","inference","private_network","private_network_subnet","private_network_route"],"description":"Filter by object type"},"start_date":{"type":"string","description":"Return events created at or after this timestamp. Cannot be earlier than 90 days ago. Default is 90 days ago.","example":"2026-01-01T00:00:00.000Z"},"end_date":{"type":"string","description":"Return events created at or before this timestamp. Cannot be before the start date."}}},"DownloadAuditLogResponseDto":{"type":"object","properties":{"url":{"type":"string","description":"Pre-signed URL to download the exported audit log JSON file. Short-lived; request a new export once it expires.","example":"https://object.storage.com/project-id/audit-log-20260317-141552-uuid.json?X-Amz-Signature=..."},"expires_at":{"type":"string","description":"ISO timestamp after which the download URL expires.","example":"2026-03-17T14:30:52.872Z"}},"required":["url","expires_at"]},"ActivityVolumeDto":{"type":"object","properties":{"id":{"type":"string","example":"91029cf3-b698-4e44-981a-af395bc94c4f"},"name":{"type":"string","example":"volume-1"},"created_at":{"type":"string","example":"2026-03-17T14:15:52.872Z"},"gb":{"type":"number","example":100},"is_shared_fs":{"type":"boolean","example":false},"template_type":{"type":"string","enum":["HDD","NVMe","HDD_Shared","NVMe_Shared","NVMe_Local_Storage","NVMe_Shared_Cluster","NVMe_OS_Cluster"],"example":"NVMe"},"location_code":{"type":"string","example":"FIN-01"}},"required":["id","name","created_at","gb","is_shared_fs","template_type","location_code"]},"ActivityComputeDto":{"type":"object","properties":{"id":{"type":"string","example":"ed644eb4-f98e-43d7-a8dd-e964b673e2eb"},"hostname":{"type":"string","example":"example-fin-01"},"compute_type":{"type":"string","example":"4A100.88V"},"is_cluster":{"type":"boolean","example":false},"ip":{"type":"object","example":"1.2.3.4","nullable":true},"os_volume_id":{"type":"object","example":"50ebd961-f2cc-4ad0-ae3c-075fb72cfab9","nullable":true},"location_code":{"type":"object","example":"FIN-01","nullable":true}},"required":["id","hostname","compute_type","is_cluster"]},"GetActivityJournalResponseDto":{"type":"object","properties":{"id":{"type":"string","example":"instance-log-123","description":"Event ID, unique within the project. Please note that it is not UUID but a combined string to identify the event."},"object_id":{"type":"string","example":"14e39b8c-29ba-4cca-a30a-5a412560eca4","description":"ID of the object that the event is related to."},"object_type":{"type":"string","enum":["compute","volume"],"example":"compute","description":"Object type that the event is related to."},"action_code":{"type":"string","enum":["create","start","start:complete","shutdown:complete","shutdown","delete","delete:complete","attach","attach:complete","detach","detach:complete","clone","resize","rename","restore","transfer","trash","trash:complete","configure_spot","cancel","provisioning","running","installation:failed","validating","deleting","error"],"example":"start","description":"Action that was performed on the object."},"actor_id":{"type":"object","example":"0381fac6-f59a-48ce-8b37-bd9376872c6b","nullable":true,"description":"ID of the actor that performed the action. For some actions, such as spot discontinue, the actor is not available and assumed to be system."},"actor_email":{"type":"object","example":"user@datacrunch.io","nullable":true,"description":"Email of the actor that performed the action."},"project_id":{"type":"string","example":"1ff857bd-1dcf-4119-b5b8-d6ee0290924f","description":"ID of the project that the event is related to."},"timestamp":{"type":"string","example":"2026-03-17T14:15:52.872Z","description":"When the event happened."},"location_code":{"type":"string","example":"FIN-01","description":"Datacenter location code where the event happened or this object is located."},"request_origin":{"type":"string","example":"public-api-v1","description":"Origin of the request that caused the event. For example, public API, Console UI, or undefined for the internal system."},"request_ip":{"type":"string","example":"127.0.0.1","description":"IP address of the request that caused the event."},"error_message":{"type":"string","example":"GPU_QUOTA_EXCEEDED","description":"For error events, the error message"},"parent_id":{"type":"string","example":"compute-log-123","description":"For some events, for example attach volume during instance provisioning, the ID of the parent event."},"service":{"type":"string","example":"VolumeProvider","description":"For some events, the internal service that caused the event."},"target_location_code":{"type":"string","example":"ICE-01","description":"For cross-datacenter events, the location code of the target location."},"volume":{"description":"Associated volume object, if the object is a volume.","allOf":[{"$ref":"#/components/schemas/ActivityVolumeDto"}]},"compute":{"description":"Detailed compute object, if the object type is a compute.","allOf":[{"$ref":"#/components/schemas/ActivityComputeDto"}]},"target_volume_id":{"type":"string","example":"5cdfba02-60c2-43f0-96af-4f9129cfcec1","description":"For some events, the ID of the target volume."},"target_volume":{"nullable":true,"description":"Associated target volume object","type":"object","allOf":[{"$ref":"#/components/schemas/ActivityVolumeDto"}]},"target_compute_id":{"type":"string","example":"7dcd8ed0-043c-47e1-bfc6-c71051ac263f","description":"For some events, the ID of the target compute."},"target_compute":{"nullable":true,"description":"Associated target compute object","type":"object","allOf":[{"$ref":"#/components/schemas/ActivityComputeDto"}]},"source_volume_id":{"type":"string","example":"cb287e64-ba92-4b2a-88a0-08fbaaf7d6e3","description":"For some events, the ID of the source volume."},"source_volume":{"nullable":true,"description":"Associated source volume object","type":"object","allOf":[{"$ref":"#/components/schemas/ActivityVolumeDto"}]},"source_compute_id":{"type":"string","example":"372d13a3-75e0-484d-8784-b4f31cc3801c","description":"For some events, the ID of the source compute."},"source_compute":{"nullable":true,"description":"Associated source compute object","type":"object","allOf":[{"$ref":"#/components/schemas/ActivityComputeDto"}]},"properties":{"type":"object","example":{"delete_reason":"evicted_by_on_demand"},"additionalProperties":true,"description":"Additional properties of the event."}},"required":["id","object_id","object_type","action_code","project_id","timestamp","location_code"]},"TagResponseDto":{"type":"object","properties":{"id":{"type":"string","example":"tag_0aB1cD2eF3gH4iJ5kL6mN7"},"key":{"type":"string","example":"environment"},"value":{"type":"string","example":"production","description":"Empty string for a freeform tag"}},"required":["id","key","value"]},"GetVolumePublicResponseDto":{"type":"object","properties":{"id":{"type":"string","example":"1019d4fb-6743-4348-a61b-c2b81dbf01f1","description":"Volume ID"},"instance_id":{"type":"object","example":"5fd9beab-ae38-419f-9888-2aca5e27d16e","description":"Instance ID"},"instances":{"description":"Instance info the volume is attached to","example":[{"id":"5fd9beab-ae38-419f-9888-2aca5e27d16e","auto_rental_extension":null,"ip":"123.123.123.123","instance_type":"4A100.88V","status":"running","os_volume_id":"987897c5-55e5-47c5-acdd-c9f3dd17e148","hostname":"hazy-star-swims-fin-01","instance_template":{"instance_type":"4A100.88V","cpu_cores":128,"gpu_number":4,"gpu_vram_gb":80,"ram_gb":512},"instance_model":{"code":"A100_80G","manufacturer":"NVIDIA","category":"GPU","cluster_model_code":null}}],"type":"array","items":{"type":"string"}},"name":{"type":"string","example":"OS-NVMe-84Ca37Jf","description":"Volume name"},"created_at":{"type":"string","example":"2024-07-08T19:19:54.247Z","description":"Volume creation date"},"created_by_user_id":{"type":"object","example":"7dfc2631-0158-4f74-93f6-6b46dcb90fef"},"status":{"type":"string","example":"attached","description":"Volume status","enum":["ordered","attached","attaching","detached","deleted","cloning","detaching","deleting","restoring","created","exported","canceled","canceling"]},"size":{"type":"number","example":100,"description":"Volume size in GB"},"is_os_volume":{"type":"boolean","example":true,"description":"Is OS volume"},"target":{"type":"object","example":"vda","description":"Volume target"},"type":{"type":"string","example":"NVMe","description":"Volume type","enum":["HDD","NVMe","HDD_Shared","NVMe_Shared","NVMe_Local_Storage","NVMe_Shared_Cluster","NVMe_OS_Cluster"]},"location":{"type":"string","example":"FIN-01","description":"Volume location"},"ssh_key_ids":{"example":["c9e5d0f8-362a-4557-a7cb-2a2d7a357a6b"],"description":"Array of SSH key IDs that are linked to the volume if it is an OS volume","type":"array","items":{"type":"string"}},"pseudo_path":{"type":"object","example":"volume-84Ca37Jf","description":"Volume pseudo path. Unique identifier for your filesystem"},"create_directory_command":{"type":"object","example":"mkdir -p /mnt/volume","description":"Create directory command"},"mount_command":{"type":"object","example":"mount -t nfs -o nconnect=16 nfs.fin-01.datacrunch.io:volume-88eb67d0 /mnt/volume","description":"Mount command"},"filesystem_to_fstab_command":{"type":"object","example":"grep -qxF 'nfs.fin-01.datacrunch.io:volume-88eb67d0 /mnt/volume nfs defaults 0 0' /etc/fstab || echo 'nfs.fin-01.datacrunch.io:volume-88eb67d0 /mnt/volume nfs defaults 0 0' | sudo tee -a /etc/fstab","description":"Filesystem to fstab command"},"contract":{"type":"string","examples":["LONG_TERM","PAY_AS_YOU_GO"],"description":"Volume contract type"},"base_hourly_cost":{"type":"number","example":0.0273972602739726,"description":"Volume base hourly cost"},"monthly_price":{"type":"number","example":20,"description":"Volume monthly price"},"currency":{"type":"string","example":"eur","description":"Volume currency","enum":["usd","eur"]},"long_term":{"type":"object","example":{"end_date":"2025-01-08T19:34:16.663Z","long_term_period":"3 months","discount_percentage":14,"auto_rental_extension":false,"next_period_price":49.93356,"current_period_price":49.93356},"description":"Long term contract details"},"tags":{"example":[{"id":"tag_0aB1cD2eF3gH4iJ5kL6mN7","key":"environment","value":"production"}],"type":"array","items":{"$ref":"#/components/schemas/TagResponseDto"}}},"required":["id","instance_id","instances","name","created_at","status","size","is_os_volume","target","type","location","ssh_key_ids","pseudo_path","create_directory_command","mount_command","filesystem_to_fstab_command","contract","base_hourly_cost","monthly_price","currency","long_term","tags"]},"GetVolumeInTrashPublicResponseDto":{"type":"object","properties":{"id":{"type":"string","example":"1019d4fb-6743-4348-a61b-c2b81dbf01f1","description":"Volume ID"},"instance_id":{"type":"object","example":"5fd9beab-ae38-419f-9888-2aca5e27d16e","description":"Instance ID"},"instances":{"description":"Instance info the volume is attached to","example":[{"id":"5fd9beab-ae38-419f-9888-2aca5e27d16e","auto_rental_extension":null,"ip":"123.123.123.123","instance_type":"4A100.88V","status":"running","os_volume_id":"987897c5-55e5-47c5-acdd-c9f3dd17e148","hostname":"hazy-star-swims-fin-01","instance_template":{"instance_type":"4A100.88V","cpu_cores":128,"gpu_number":4,"gpu_vram_gb":80,"ram_gb":512},"instance_model":{"code":"A100_80G","manufacturer":"NVIDIA","category":"GPU","cluster_model_code":null}}],"type":"array","items":{"type":"string"}},"name":{"type":"string","example":"OS-NVMe-84Ca37Jf","description":"Volume name"},"created_at":{"type":"string","example":"2024-07-08T19:19:54.247Z","description":"Volume creation date"},"status":{"type":"string","example":"attached","description":"Volume status","enum":["ordered","attached","attaching","detached","deleted","cloning","detaching","deleting","restoring","created","exported","canceled","canceling"]},"size":{"type":"number","example":100,"description":"Volume size in GB"},"is_os_volume":{"type":"boolean","example":true,"description":"Is OS volume"},"target":{"type":"object","example":"vda","description":"Volume target"},"type":{"type":"string","example":"NVMe","description":"Volume type","enum":["HDD","NVMe","HDD_Shared","NVMe_Shared","NVMe_Local_Storage","NVMe_Shared_Cluster","NVMe_OS_Cluster"]},"location":{"type":"string","example":"FIN-01","description":"Volume location"},"ssh_key_ids":{"example":["c9e5d0f8-362a-4557-a7cb-2a2d7a357a6b"],"description":"Array of SSH key IDs that are linked to the volume if it is an OS volume","type":"array","items":{"type":"string"}},"contract":{"type":"string","examples":["LONG_TERM","PAY_AS_YOU_GO"],"description":"Volume contract type"},"base_hourly_cost":{"type":"number","example":0.0273972602739726,"description":"Volume base hourly cost"},"monthly_price":{"type":"number","example":20,"description":"Volume monthly price"},"currency":{"type":"string","example":"eur","description":"Volume currency","enum":["usd","eur"]},"tags":{"example":[{"id":"tag_0aB1cD2eF3gH4iJ5kL6mN7","key":"environment","value":"production"}],"type":"array","items":{"$ref":"#/components/schemas/TagResponseDto"}},"deleted_at":{"type":"object","example":"2025-01-10T11:35:47.633Z","description":"Volume deletion date"},"is_permanently_deleted":{"type":"boolean","example":false,"description":"Is volume permanently deleted"}},"required":["id","instance_id","instances","name","created_at","status","size","is_os_volume","target","type","location","ssh_key_ids","contract","base_hourly_cost","monthly_price","currency","tags","deleted_at","is_permanently_deleted"]},"TagDto":{"type":"object","properties":{"key":{"type":"string","example":"environment","maxLength":63},"value":{"type":"string","example":"production","maxLength":127,"description":"Omit for a freeform tag with no value"}},"required":["key"]},"CreateVolumePublicDto":{"type":"object","properties":{"type":{"type":"string","enum":["HDD","NVMe","HDD_Shared","NVMe_Shared","NVMe_Local_Storage","NVMe_Shared_Cluster","NVMe_OS_Cluster"],"description":"Volume type","example":"NVMe"},"location_code":{"type":"string","example":"FIN-01","description":"Location code"},"size":{"type":"number","example":50,"description":"Volume size in GB"},"instance_id":{"type":"string","example":"65df62f3-5d40-49db-bd73-9eef624a335c","description":"Instance ID to attach the volume to"},"instance_ids":{"example":["602eeac0-fd04-4bad-9738-4828486f36c9","a34de0ab-f510-44d2-8fcb-8b30b1ff9370"],"description":"Array of instance IDs to attach the volume to","type":"array","items":{"type":"string"}},"name":{"type":"string","example":"my-volume","description":"Volume name"},"tags":{"description":"Key-value tags for the new volume. Maximum 10. Omit `value` for a freeform tag. Keys are lowercased.","example":[{"key":"environment","value":"production"}],"type":"array","items":{"$ref":"#/components/schemas/TagDto"}}},"required":["type","location_code","size","name"]},"PerformVolumeActionPublicDto":{"type":"object","properties":{"action":{"type":"string","enum":["attach","detach","delete","rename","resize","restore","clone","cancel","create","export","transfer"],"description":"Action to perform on the volume(s)\n\nThe `clone` action returns its destination volume ID: `{\"id\":\"...\"}`. Send a `cancel` action with that same ID to interrupt a cross-datacenter clone.","example":"detach"},"id":{"example":["00399828-d381-49ef-b294-5c5d82399343"],"description":"Volume ID(s) to perform the action on. Single volume id or an array of volume ids","oneOf":[{"type":"string","format":"uuid"},{"type":"array","items":{"type":"string","format":"uuid"}}]},"size":{"type":"number","example":100,"description":"New volume size in GB. Can't be lower than current size"},"instance_id":{"type":"string","example":"79d3692a-4b49-46d5-a3c7-f2d310e6bcf0","description":"Instance ID to attach the volume to, if the action is attach"},"instance_ids":{"example":["c990734d-1b5a-401a-b779-e45a1273b482","cd1af5ce-e848-44c2-86d9-a7ca5ce27070"],"description":"Array of instance IDs to attach the volume to, if the action is attach","type":"array","items":{"type":"string"}},"name":{"type":"string","example":"volume-name","description":"New volume name"},"type":{"type":"string","example":"NVMe","description":"Target volume type"},"is_permanent":{"type":"boolean","example":true,"description":"If deleting volume(s), delete them permanently"},"location_code":{"type":"string","example":"FIN-01","description":"Target location code if cloning the volume"}},"required":["action","id"]},"DeleteVolumePublicDto":{"type":"object","properties":{"is_permanent":{"type":"boolean","example":false,"default":false,"description":"If true, the volume will be removed permanently"}}},"VolumeType":{"type":"object","properties":{"type":{"type":"string","description":"Volume type","example":"NVMe","enum":["HDD","NVMe","HDD_Shared","NVMe_Shared","NVMe_Local_Storage","NVMe_Shared_Cluster","NVMe_OS_Cluster"]},"price":{"type":"object","description":"Price details","example":{"price_per_month_per_gb":0.2,"cps_per_gb":7.6103500761035e-8,"currency":"usd"}},"is_shared_fs":{"type":"boolean","description":"Is shared file system","example":false},"burst_bandwidth":{"type":"number","description":"Burst bandwidth","example":2500},"continuous_bandwidth":{"type":"number","description":"Continuous bandwidth","example":2000},"internal_network_speed":{"type":"number","description":"Internal network speed","example":50},"iops":{"type":"string","description":"IOPS","example":"100k"},"throughput_gbps":{"type":"number","description":"Throughput in GB/s","example":4}},"required":["type","price","is_shared_fs","burst_bandwidth","continuous_bandwidth","internal_network_speed","iops","throughput_gbps"]},"GetInstanceResponsePublicApiDto":{"type":"object","properties":{"id":{"type":"string","example":"a1a0ed5c-480d-420b-a9eb-20c45c5b86ad"},"ip":{"type":"object","example":"1.2.3.4","description":"Public address; `null` when the instance is not reachable from the internet","nullable":true},"private_ip":{"type":"string","example":"10.0.0.5","description":"Address on the private network; `null` when the instance is not on one","nullable":true},"private_network_id":{"type":"string","example":"pn_d90ky5tk","description":"Private network the instance is attached to; `null` when it is not on one","nullable":true},"subnet_id":{"type":"string","example":"sn_82gp8jck","description":"Subnet the private address is from; `null` when the instance is not on a private network","nullable":true},"status":{"type":"string","enum":["running","provisioning","offline","discontinued","unknown","ordered","notfound","new","error","deleting","validating","no_capacity","installation_failed"],"example":"running"},"created_at":{"type":"string","example":"2023-07-15T14:10:26.654Z"},"created_by_user_id":{"type":"object","example":"7dfc2631-0158-4f74-93f6-6b46dcb90fef"},"cpu":{"type":"object","example":{"description":"176 CPU","number_of_cores":176,"model":"AMD Genoa"}},"gpu":{"type":"object","example":{"description":"8x A100","number_of_gpus":8}},"gpu_memory":{"type":"object","example":{"description":"80GB GPU RAM","size_in_gigabytes":80}},"memory":{"type":"object","example":{"description":"640GB RAM","size_in_gigabytes":640}},"storage":{"type":"object","example":{"description":"dynamic"}},"hostname":{"type":"string","example":"hazy-star-swims-fin-01"},"description":{"type":"string","example":"ubuntu-22-04-cuda-12-0-docker-fin-01","description":"Instance description; an empty string when none was supplied."},"tags":{"example":[{"id":"tag_0aB1cD2eF3gH4iJ5kL6mN7","key":"environment","value":"production"}],"type":"array","items":{"$ref":"#/components/schemas/TagResponseDto"}},"location":{"type":"string","example":"FIN-01"},"price_per_hour":{"type":"number","example":2.481},"is_spot":{"type":"boolean","example":false},"instance_type":{"type":"string","example":"8A100.176V"},"image":{"type":"object","example":"ubuntu-22-04-cuda-12-0-docker"},"os_name":{"type":"object","example":"Ubuntu 22.04"},"startup_script_id":{"type":"object","example":"95cec4c3-af69-42eb-a790-fcacebfdfcea"},"ssh_key_ids":{"example":["dd50b622-1c36-48c2-a485-f4d4937a3ea1"],"type":"array","items":{"type":"string"}},"os_volume_id":{"type":"object","example":"95cec4c3-af69-42eb-a790-fcacebfdfcea"},"jupyter_token":{"type":"object","example":"b9e6d8517db3a722ccfb309ca599a35f"},"contract":{"type":"string","enum":["LONG_TERM","PAY_AS_YOU_GO","SPOT"],"example":"PAY_AS_YOU_GO"},"pricing":{"type":"string","enum":["DYNAMIC_PRICE","FIXED_PRICE"],"example":"FIXED_PRICE"},"volume_ids":{"example":["95cec4c3-af69-42eb-a790-fcacebfdfcea","dd50b622-1c36-48c2-a485-f4d4937a3ea1"],"type":"array","items":{"type":"string"}}},"required":["id","ip","private_ip","private_network_id","subnet_id","status","created_at","cpu","gpu","gpu_memory","memory","storage","hostname","description","tags","location","price_per_hour","is_spot","instance_type","image","os_name","startup_script_id","ssh_key_ids","os_volume_id","jupyter_token","contract","pricing","volume_ids"]},"OsVolumeDto":{"type":"object","properties":{"name":{"type":"string","example":"custom-os-volume-name"},"size":{"type":"number","example":"100"},"on_spot_discontinue":{"type":"string","enum":["keep_detached","move_to_trash","delete_permanently"],"description":"Optional, by default, nothing is deleted. Should we automatically delete, if instance is deleted because of spot?\nAllowed values:\n\n * `keep_detached` (default behavior, volume will be detached),\n * `move_to_trash` (will be deleted after 96 hours and counts towards the storage volume quota),\n * `delete_permanently` (will be deleted immediately)."},"tags":{"example":[{"key":"environment","value":"production"}],"description":"Key-value tags for the new volume. Maximum 10. Omit `value` for a freeform tag. Keys are lowercased.","type":"array","items":{"$ref":"#/components/schemas/TagDto"}}},"required":["name","size"]},"VolumeDto":{"type":"object","properties":{"name":{"type":"string","example":"custom-os-volume-name"},"size":{"type":"number","example":"100"},"on_spot_discontinue":{"type":"string","enum":["keep_detached","move_to_trash","delete_permanently"],"description":"Optional, by default, nothing is deleted. Should we automatically delete, if instance is deleted because of spot?\nAllowed values:\n\n * `keep_detached` (default behavior, volume will be detached),\n * `move_to_trash` (will be deleted after 96 hours and counts towards the storage volume quota),\n * `delete_permanently` (will be deleted immediately)."},"tags":{"example":[{"key":"environment","value":"production"}],"description":"Key-value tags for the new volume. Maximum 10. Omit `value` for a freeform tag. Keys are lowercased.","type":"array","items":{"$ref":"#/components/schemas/TagDto"}},"type":{"type":"string","enum":["HDD","NVMe","HDD_Shared","NVMe_Shared","NVMe_Local_Storage","NVMe_Shared_Cluster","NVMe_OS_Cluster"]}},"required":["name","size","type"]},"DeployInstancePublicDto":{"type":"object","properties":{"instance_group_id":{"type":"string","example":"a47c8fce-54f3-4b1c-b004-05ab901a63bb","description":"Create this instance in the given instance group."},"instance_type":{"type":"string","example":"1H100.80S.30V","description":"Required unless `instance_group_id` is set, in which case the group supplies it."},"image":{"type":"string","description":"Required unless `instance_group_id` is set, in which case the group's template supplies the default (a group instance may override it).\n\nOS image specification for the created instance. There are two options:\n\n1. OS image type or UUID. For a list of advertised images, check `GET /images`. Hidden images can also be deployed directly. The image must be enabled or explicitly enabled for the project owner. To set the name and size, use `\"os_volume\"` property.\n2. Previously customized OS volume ID. (To create an OS volume, first make an instance with existing `\"image\"` type.\nTo customize the volume content, ssh into that instance. Finally, delete the instance but keep the volume.)","examples":["ubuntu-22.04-cuda-12.4-docker","e5eedae5-feb9-49d8-b43e-57c36df88e39"]},"ssh_key_ids":{"example":["55a3c330-eb1a-4a86-ae8e-f637d692b68a"],"oneOf":[{"type":"string","format":"uuid"},{"type":"array","items":{"type":"string","format":"uuid"}}]},"startup_script_id":{"type":"string","example":"1f7578bd-9b2a-49b7-a269-63bfbdf04d64"},"hostname":{"type":"string","example":"my-instance-hostname"},"description":{"type":"string","description":"Optional instance description."},"tags":{"description":"Key-value tags for the new instance. Maximum 10. Omit `value` for a freeform tag. Keys are lowercased.","example":[{"key":"environment","value":"production"},{"key":"benchmark"}],"type":"array","items":{"$ref":"#/components/schemas/TagDto"}},"location_code":{"type":"string","example":"FIN-01","description":"Location code for the instance and any newly created volumes. Required unless `instance_group_id` is set, in which case the group supplies it."},"os_volume":{"description":"Newly created OS volume name and size (in GB). Use when `\"image\"` property is an OS image type. For a group instance, the size must be at least the group's OS volume size.\n\nObject properties:\n  * `name` - Name of the OS volume\n  * `size` - Size of the OS volume in GB\n  * `on_spot_discontinue` - Removal policy for the OS volume for spot instances. Optional, by default, nothing is deleted. Allowed values: `keep_detached` (default behavior), `move_to_trash` (will be deleted after 96 hours and counts towards the storage volume quota), `delete_permanently` (will be deleted immediately).\n    ","example":{"name":"custom-os-volume-name","size":100,"on_spot_discontinue":"keep_detached"},"allOf":[{"$ref":"#/components/schemas/OsVolumeDto"}]},"is_spot":{"type":"boolean","description":"Create a spot instance. Spot instances may be evicted by Verda at any time without warning."},"coupon":{"type":"string","example":"COUPON-CODE-2026"},"volumes":{"description":"Additional (**non-OS**) volumes to create and attach to this new instance.\n    \n  (To configure **OS** volume, use `\"image\"` and `\"os_volume\"` properties.)","example":[{"name":"additional-volume-name","size":1000,"type":"NVMe"}],"type":"array","items":{"$ref":"#/components/schemas/VolumeDto"}},"existing_volumes":{"description":"IDs of additional existing detached volumes to attach to this new instance when its created.\n\n(To configure instance **OS** volume, use `\"image\"` and `\"os_volume\"` properties.)","example":["87c65146-300b-4df3-b884-3ec0e59f1da6"],"type":"array","items":{"type":"string"}},"contract":{"type":"string","example":"PAY_AS_YOU_GO","enum":["LONG_TERM","PAY_AS_YOU_GO","SPOT"]},"pricing":{"type":"string","deprecated":true,"example":"FIXED_PRICE","enum":["DYNAMIC_PRICE","FIXED_PRICE"],"description":"This field is deprecated as DYNAMIC_PRICE is removed. Only FIXED_PRICE is supported now."},"private_ip":{"type":"string","examples":["auto","none","10.0.0.5"],"description":"Private network address: `\"auto\"` to attach the instance to a private network with an allocated address, an IPv4 from the subnet, or `\"none\"` for an instance without one. Requires `public_ip`. Omitting both means `\"none\"` today."},"public_ip":{"type":"string","examples":["auto","none"],"description":"Public IPv4: `\"auto\"` to get one, or `\"none\"` to keep the instance off the internet. Requires `private_ip`; an instance without a private address always gets one (`\"auto\"`). On a private network this is a 1:1 NAT address."},"network":{"type":"string","example":"pn_d90ky5tk","description":"Private network to attach the instance to; redundant when `subnet` is given, and a mismatched pair is rejected. Omitting both takes the project's default network, created on first use."},"subnet":{"type":"string","example":"sn_82gp8jck","description":"Subnet to take the private address from. Defaults to the network's default subnet in the instance's location."}},"required":["hostname"]},"PerformInstanceActionPublicDto":{"type":"object","properties":{"action":{"type":"string","enum":["boot","start","shutdown","delete","discontinue","hibernate","configure_spot","force_shutdown","delete_stuck","deploy","transfer"]},"id":{"example":["1b7619cb-471b-40b0-9b4a-be44ffd14eb1"],"description":"Instance ID or list of instance IDs","oneOf":[{"type":"string","format":"uuid"},{"type":"array","items":{"type":"string","format":"uuid"}}]},"volume_ids":{"example":["08652223-99e9-4f8c-b3ae-85223d6a015e"],"description":"Volume IDs to delete. Specify empty array to indicate no volumes should be deleted (previously known as \"hibernate\")","type":"array","items":{"type":"string"}},"delete_permanently":{"type":"boolean","description":"Delete the volumes permanently. Only applicable for delete (or discontinue) action, when volume IDs to delete are also provided.","default":false}},"required":["action","id"]},"InstanceActionResultDto":{"type":"object","properties":{"instanceId":{"type":"string","description":"Instance ID","format":"uuid"},"action":{"type":"string","enum":["boot","start","shutdown","delete","discontinue","hibernate","configure_spot","force_shutdown","delete_stuck","deploy","transfer"],"description":"Action that was requested"},"status":{"type":"string","enum":["success","error"],"description":"Whether the action succeeded or failed"},"error":{"type":"string","description":"Error message if the action failed"},"statusCode":{"type":"number","description":"HTTP status code of the error","example":400}},"required":["instanceId","action","status"]},"GetClusterResponsePublicApiDto":{"type":"object","properties":{"id":{"type":"string","example":"b0dfba48-be8a-4c1b-81a2-3ef17f82c4e5"},"ip":{"type":"object","example":"1.2.3.4","description":"Jump host IP address"},"status":{"type":"string","enum":["running","provisioning","offline","discontinued","unknown","ordered","notfound","new","error","deleting","validating","no_capacity","installation_failed"],"example":"running"},"created_at":{"type":"string","example":"2023-07-15T14:10:26.654Z"},"created_by_user_id":{"type":"object","example":"7dfc2631-0158-4f74-93f6-6b46dcb90fef"},"cpu":{"type":"object","example":{"description":"176 CPU","number_of_cores":176,"model":"AMD Genoa"}},"gpu":{"type":"object","example":{"description":"8x A100","number_of_gpus":8}},"gpu_memory":{"type":"object","example":{"description":"80GB GPU RAM","size_in_gigabytes":80}},"memory":{"type":"object","example":{"description":"640GB RAM","size_in_gigabytes":640}},"hostname":{"type":"string","example":"hazy-star-swims-fin-01"},"description":{"type":"string","example":"ubuntu-22-04-cuda-12-0-docker-fin-01","description":"Cluster description; an empty string when none was supplied."},"tags":{"example":[{"id":"tag_0aB1cD2eF3gH4iJ5kL6mN7","key":"environment","value":"production"}],"type":"array","items":{"$ref":"#/components/schemas/TagResponseDto"}},"location":{"type":"string","example":"FIN-01"},"price_per_hour":{"type":"number","example":2.481},"cluster_type":{"type":"string","example":"16H200"},"image":{"type":"object","example":"ubuntu-22-04-cuda-12-0-docker","description":"OS image used to deploy the cluster nodes"},"os_name":{"type":"object","example":"Ubuntu 22.04"},"startup_script_id":{"type":"object","example":"95cec4c3-af69-42eb-a790-fcacebfdfcea"},"ssh_key_ids":{"example":["dd50b622-1c36-48c2-a485-f4d4937a3ea1"],"description":"SSH key IDs used to access the cluster jump host","type":"array","items":{"type":"string"}},"contract":{"type":"string","description":"Contract type used for this cluster","enum":["LONG_TERM","PAY_AS_YOU_GO"],"example":"LONG_TERM"},"auto_rental_extension":{"type":"boolean","example":false,"deprecated":true,"description":"Deprecated: use extension_settings instead."},"turn_to_pay_as_you_go":{"type":"boolean","example":false,"deprecated":true,"description":"Deprecated: use extension_settings instead."},"extension_settings":{"type":"string","enum":["auto_renew","pay_as_you_go","end_contract"],"description":"Extension settings for long-term contracts"},"long_term_period":{"type":"string","example":"1 week","description":"Long-term rental period for this cluster, e.g. 1 week etc."},"worker_nodes":{"description":"Worker nodes of this cluster. You can access them from the jump host by executing `ssh <hostname>`","example":[{"id":"1","hostname":"worker-1","public_ip":"1.2.3.4","private_ip":"1.2.3.4","status":"running"}],"type":"array","items":{"type":"string"}},"shared_volumes":{"description":"Shared volumes attached to this cluster. There is always one shared volume mounted as /home.","example":[{"id":"1","name":"shared-volume-1","mount_point":"/home","size_in_gigabytes":100}],"type":"array","items":{"type":"string"}}},"required":["id","ip","status","created_at","cpu","gpu","gpu_memory","memory","hostname","description","tags","location","price_per_hour","cluster_type","image","os_name","ssh_key_ids","contract"]},"SharedVolumeDto":{"type":"object","properties":{"name":{"type":"string","example":"SFS-pmAna3o2","description":"Name of the shared cluster volume"},"size":{"type":"number","example":30000,"description":"Size of the shared cluster volume in GB"}},"required":["name","size"]},"ExistingSharedVolumeDto":{"type":"object","properties":{"id":{"type":"string","example":"f3124fca-d631-4f90-9eee-3f85829081e7","description":"Existing shared volume ID"}},"required":["id"]},"DeployClusterPublicDto":{"type":"object","properties":{"cluster_type":{"type":"string","description":"Cluster instance type. Can be listed using the `GET /v1/cluster-types` endpoint.","example":"16H200"},"image":{"type":"string","description":"OS image type or UUID for the cluster. For a list of advertised images, check `GET /v1/images/cluster`. Hidden images can also be deployed directly. The image must be enabled or explicitly enabled for the project owner and compatible with the cluster type.","examples":["ubuntu-22.04-cuda-12.4-cluster","b610ad72-418e-423c-9dc5-ec9ef478f448"]},"ssh_key_ids":{"example":["d5afa2b2-0272-4a58-86fb-16c856a11e71"],"description":"SSH key IDs to attach to the cluster. Required if image is an OS image type.","oneOf":[{"type":"string","format":"uuid"},{"type":"array","items":{"type":"string","format":"uuid"}}]},"startup_script_id":{"type":"string","example":"496628b4-8b65-44ce-ab27-716cbb77d7f6","description":"Startup script ID to run on cluster initialization"},"hostname":{"type":"string","example":"dark-vm-shrinks-fin-01"},"description":{"type":"string","example":"ubuntu-22-04-cuda-12-4-16b200-fin-01","description":"Optional cluster description. Omit or pass null to use an empty string."},"tags":{"description":"Key-value tags for the new cluster. Maximum 10. Omit `value` for a freeform tag. Keys are lowercased.","example":[{"key":"environment","value":"production"},{"key":"benchmark"}],"type":"array","items":{"$ref":"#/components/schemas/TagDto"}},"location_code":{"type":"string","example":"FIN-01","description":"Location code for the cluster and its shared volume"},"contract":{"type":"string","enum":["PAY_AS_YOU_GO","LONG_TERM"],"example":"PAY_AS_YOU_GO","description":"Contract type. For clusters, only PAY_AS_YOU_GO currently supported."},"extension_settings":{"type":"string","enum":["auto_renew","pay_as_you_go","end_contract"],"description":"Extension settings for long-term contracts. Takes priority over auto_rental_extension and turn_to_pay_as_you_go."},"auto_rental_extension":{"type":"boolean","deprecated":true,"description":"Deprecated: use extension_settings instead. Enable automatic rental extension for long-term contracts."},"turn_to_pay_as_you_go":{"type":"boolean","deprecated":true,"description":"Deprecated: use extension_settings instead. Automatically convert to pay-as-you-go after the long-term period ends."},"shared_volume":{"description":"Shared cluster volume (SFS) specification. Clusters have one shared volume mounted as /home. The OS volume is ephemeral and created automatically by the system. ","example":{"name":"cluster-volume-name","size":30000},"allOf":[{"$ref":"#/components/schemas/SharedVolumeDto"}]},"existing_volumes":{"description":"Existing shared volumes to attach to the cluster. Should be in the same location as the cluster. Must be previously created and attached to the cluster.","example":[],"type":"array","items":{"$ref":"#/components/schemas/ExistingSharedVolumeDto"}}},"required":["cluster_type","image","hostname","location_code","shared_volume"]},"DeployClusterResponsePublicApiDto":{"type":"object","properties":{"id":{"type":"string","example":"3d646079-0bd4-4cb8-b751-ddbaa75fb160"}},"required":["id"]},"PerformClusterActionPublicDto":{"type":"object","properties":{"action":{"type":"string","enum":["discontinue"],"example":"discontinue"},"id":{"type":"string","example":"d11e936c-ef11-43da-9784-cb9ec0a10302","description":"Cluster ID"}},"required":["action","id"]},"PerformClusterActionsBulkDto":{"type":"object","properties":{"actions":{"description":"Array of cluster actions, one per each cluster","example":[{"action":"discontinue","id":"33b845fb-5767-485a-bea9-92af2aff2f1d"},{"action":"discontinue","id":"299442a5-2f56-415e-891e-2fb5b70df285"}],"type":"array","items":{"$ref":"#/components/schemas/PerformClusterActionPublicDto"}}},"required":["actions"]},"PerformClusterNodeActionPublicDto":{"type":"object","properties":{"action":{"type":"string","enum":["boot","shutdown","force_shutdown"],"example":"shutdown"}},"required":["action"]},"InstanceType":{"type":"object","properties":{"best_for":{"description":"Use cases for instance type","example":["Giant ML models","Multi-GPU training","FP64 calculations","NVLINK"],"type":"array","items":{"type":"string"}},"cpu":{"type":"object","description":"CPU details","example":{"description":"22 CPU","number_of_cores":22,"model":"AMD Genoa"}},"deploy_warning":{"type":"object","description":"Deploy warning","example":"Make sure your VM is running on latest Nvidia Driver 525.100+ or newer"},"description":{"type":"string","description":"Instance type description","example":"Dedicated Hardware Instance"},"gpu":{"type":"object","description":"GPU details","example":{"description":"1x H100 SXM5 80GB","number_of_gpus":1}},"gpu_memory":{"type":"object","description":"GPU memory details","example":{"description":"80GB GPU RAM","size_in_gigabytes":80}},"id":{"type":"string","description":"Instance type ID","example":"c01dd00d-0000-4972-ae4e-d429115d055b"},"instance_type":{"type":"string","description":"Instance type","example":"1H100.80S.22V"},"memory":{"type":"object","description":"Memory details","example":{"description":"187GB RAM","size_in_gigabytes":187}},"model":{"type":"string","description":"GPU model","example":"H100"},"name":{"type":"string","description":"GPU model name","example":"H100 SXM5 80GB"},"p2p":{"type":"object","description":"P2P details","example":"600 GB/s"},"price_per_hour":{"type":"string","description":"Price per hour","example":"3.17"},"spot_price":{"type":"string","description":"Spot price per hour","example":"0.31"},"dynamic_price":{"type":"object","description":"Current dynamic price","example":"1.25","deprecated":true},"max_dynamic_price":{"type":"string","description":"Ceiling value for dynamic price","example":"6.34","deprecated":true},"serverless_price":{"type":"object","description":"Current serverless price","example":"1.75"},"serverless_spot_price":{"type":"object","description":"Current serverless spot price","example":"0.87"},"storage":{"type":"object","description":"Storage details","example":{"description":"dynamic"}},"currency":{"type":"string","enum":["usd","eur"],"description":"Currency type","example":"usd"},"manufacturer":{"type":"string","description":"Manufacturer","example":"NVIDIA"},"display_name":{"type":"object","description":"Display name","example":"NVIDIA H100 SXM5 80GB"},"supported_os":{"description":"Supported OS image types","example":["ubuntu-22.04-cuda-12.3","ubuntu-24.04"],"type":"array","items":{"type":"string"}}},"required":["best_for","cpu","description","gpu","gpu_memory","id","instance_type","memory","model","name","p2p","price_per_hour","spot_price","max_dynamic_price","storage","currency","manufacturer","display_name","supported_os"]},"InstanceAvailabilityResponseDto":{"type":"object","properties":{"location_code":{"type":"string","description":"Location code","example":"FIN-01"},"availabilities":{"description":"Array of available instance types","example":["1H100.80S.22V","2H100.80S.60V","4H100.80S.176V","8H100.80S.352V"],"type":"array","items":{"type":"string"}}},"required":["location_code","availabilities"]},"ClusterAvailabilityResponseDto":{"type":"object","properties":{"location_code":{"type":"string","description":"Location code","example":"FIN-01"},"availabilities":{"description":"Array of available cluster types","example":["16H200","32H200"],"type":"array","items":{"type":"string"}}},"required":["location_code","availabilities"]},"GetKeysResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"SSH key id","example":"f7b3b3b3-1b3b-4b3b-8b3b-3b3b3b3b3b3b"},"name":{"type":"string","description":"Name of the SSH key","example":"my-key"},"key":{"type":"string","description":"Public SSH key","example":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD..."},"fingerprint":{"type":"string","description":"MD5 fingerprint of the public key as colon-separated hex (matches `ssh-keygen -E md5`). `null` if the stored key cannot be parsed.","example":"9b:11:74:af:5c:04:48:31:40:ef:b5:ef:e3:dc:33:81","nullable":true},"created_by_user_id":{"type":"string","description":"ID of the user who added this SSH key record to the project. `null` when the creator is unknown or no longer exists.","format":"uuid","nullable":true}},"required":["id","name","key","fingerprint","created_by_user_id"]},"AddKeyDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the SSH key","example":"my-key"},"key":{"type":"string","description":"Public SSH key","example":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD..."}},"required":["name","key"]},"DeleteKeysPublicDto":{"type":"object","properties":{"keys":{"example":["7f2f4d7f-b6bc-4074-aeff-9b617c324ce7"],"type":"array","items":{"type":"string"}}},"required":["keys"]},"GetScriptResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Script ID","example":"02583d88-615b-4b20-a52a-21866c0dac58"},"name":{"type":"string","description":"Script name","example":"My startup script"},"script":{"type":"string","description":"Script content","example":"#!/bin/bash\n\necho hello world"},"created_at":{"type":"string","description":"Script creation date","example":"2026-06-12T10:30:00.000Z"}},"required":["id","name","script","created_at"]},"AddScriptDto":{"type":"object","properties":{"name":{"type":"string","description":"Script name","example":"My startup script"},"script":{"type":"string","description":"Script content","example":"#!/bin/bash\n\necho hello world"}},"required":["name","script"]},"DeleteScriptsDto":{"type":"object","properties":{"scripts":{"example":["49ca46ad-b15b-407f-a6fa-b26386836705"],"type":"array","items":{"type":"string"}}},"required":["scripts"]},"LongTermPeriodResponseDto":{"type":"object","properties":{"code":{"type":"string","description":"Long term period code","example":"3_MONTHS"},"name":{"type":"string","description":"Long term period name","example":"3 months"},"is_enabled":{"type":"boolean","description":"Is long term period enabled","example":true},"unit_name":{"type":"string","description":"Time unit name","example":"month","enum":["hour","day","week","month","year"]},"unit_value":{"type":"number","description":"Time unit value","example":3},"discount_percentage":{"type":"number","description":"Discount percentage","example":14}},"required":["code","name","is_enabled","unit_name","unit_value","discount_percentage"]},"ClusterType":{"type":"object","properties":{"id":{"type":"string","description":"Instance type ID","example":"c01dd00d-0000-4972-ae4e-d429115d055b"},"model":{"type":"string","description":"GPU model","example":"B200 Cluster"},"name":{"type":"string","description":"GPU model name","example":"H100 SXM5 80GB"},"cluster_type":{"type":"string","description":"Instance type","example":"16H200"},"cpu":{"type":"object","description":"CPU details","example":{"description":"128 CPU","number_of_cores":128,"model":"AMD Turin"}},"gpu":{"type":"object","description":"GPU details","example":{"description":"1x H100 SXM5 80GB","number_of_gpus":1}},"gpu_memory":{"type":"object","description":"GPU memory details","example":{"description":"80GB GPU RAM","size_in_gigabytes":80}},"memory":{"type":"object","description":"Memory details","example":{"description":"187GB RAM","size_in_gigabytes":187}},"price_per_hour":{"type":"string","description":"Price per hour","example":"3.17"},"currency":{"type":"string","enum":["usd","eur"],"description":"Currency type","example":"usd"},"manufacturer":{"type":"string","description":"Manufacturer","example":"NVIDIA"},"node_details":{"description":"Node details","example":[{"GPU VRAM":"1536 GB"},{"AMD Turin CPU":"128 cores"},{"InfiniBand":"3200 Gbit/s"},{"Ethernet":"100 Gbit/s"},{"Uplink":"5 Gbit/s"}],"type":"array","items":{"type":"string"}},"supported_os":{"description":"Supported OS image types","example":["ubuntu-22.04-cuda-12.3","ubuntu-24.04"],"type":"array","items":{"type":"string"}}},"required":["id","model","name","cluster_type","cpu","gpu","gpu_memory","memory","price_per_hour","currency","manufacturer","node_details","supported_os"]},"ContainerType":{"type":"object","properties":{"id":{"type":"string","description":"Instance type ID","example":"60006000-6000-47af-8ff0-600060006004"},"model":{"type":"string","description":"GPU model","example":"RTX PRO 6000"},"name":{"type":"string","description":"GPU model name","example":"RTX PRO 6000 96GB"},"instance_type":{"type":"string","description":"Instance type","example":"8RTXPRO6000.224V"},"cpu":{"type":"object","description":"CPU details","example":{"description":"224 CPU","number_of_cores":224,"model":"AMD Turin"}},"gpu":{"type":"object","description":"GPU details","example":{"description":"8x RTX PRO 6000 96GB","number_of_gpus":8}},"gpu_memory":{"type":"object","description":"GPU memory details","example":{"description":"768GB GPU RAM","size_in_gigabytes":768}},"memory":{"type":"object","description":"Memory details","example":{"description":"680GB RAM","size_in_gigabytes":680}},"serverless_price":{"type":"string","description":"Current serverless price","example":"1.529"},"serverless_spot_price":{"type":"string","description":"Current serverless spot price","example":"0.7645"},"currency":{"type":"string","enum":["usd","eur"],"description":"Currency type","example":"usd"},"manufacturer":{"type":"string","description":"Manufacturer","example":"NVIDIA"}},"required":["id","model","name","instance_type","cpu","gpu","gpu_memory","memory","serverless_price","serverless_spot_price","currency","manufacturer"]},"ManagedEndpointPrice":{"type":"object","properties":{"resource":{"type":"string","description":"Managed endpoint / inference model identifier","example":"NVIDIA-H100-80GB-HBM3"},"external_id":{"type":"string","description":"External managed endpoint / inference model identifier","example":"meta-llama-3-1-8b-instruct"},"unit_price":{"type":"number","description":"Unit price in the requested currency","example":0.99},"unit_name":{"type":"string","enum":["generation","image","video","input_token","output_token","token","audio_second","video_second","inference_second","vcpu_second","gb_second","hour","second","minute","undefined","gpu_hour","gb_hour","gb_month","request"],"description":"Unit the price is charged per","example":"hour"},"currency":{"type":"string","enum":["usd","eur"],"description":"Currency type","example":"usd"}},"required":["resource","external_id","unit_price","unit_name","currency"]},"AccessKeyPublicResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the access key pair","example":"7dfc2631-0158-4f74-93f6-6b46dcb90fef"},"name":{"type":"string","description":"Name of the access key pair","example":"my-key"},"access_key":{"type":"string","description":"S3-compatible access key","example":"AKIAIOSFODNN7EXAMPLE"},"created_at":{"format":"date-time","type":"string","description":"When the access key was created","example":"2024-01-15T14:10:27.114Z"}},"required":["id","name","access_key","created_at"]},"CreateAccessKeyPublicDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the access key pair. Name cannot be blank, contain invisible Unicode, or contain the special characters @ : . / \\ < >.","example":"my-key","maxLength":32}},"required":["name"]},"CreateAccessKeyPublicResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the access key pair","example":"7dfc2631-0158-4f74-93f6-6b46dcb90fef"},"name":{"type":"string","description":"Name of the access key pair","example":"my-key"},"access_key":{"type":"string","description":"S3-compatible access key","example":"AKIAIOSFODNN7EXAMPLE"},"secret_key":{"type":"string","description":"S3-compatible secret key","example":"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"},"created_at":{"format":"date-time","type":"string","description":"When the access key was created","example":"2024-01-15T14:10:27.114Z"}},"required":["id","name","access_key","secret_key","created_at"]},"GetBucketResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Deprecated: will be removed on 2026-11-10. Identify buckets by `name` instead; no endpoint accepts this identifier.","example":"7dfc2631-0158-4f74-93f6-6b46dcb90fef","deprecated":true},"name":{"type":"string","description":"Globally unique bucket name","example":"my-app-uploads"},"object_count":{"type":"number","description":"Number of objects stored in the bucket","example":42},"size_gb":{"type":"number","description":"Total size of all objects in GB","example":1},"created_at":{"format":"date-time","type":"string","description":"When the bucket was created","example":"2024-01-15T14:10:27.114Z"}},"required":["id","name","created_at"]},"BucketNameRequestDto":{"type":"object","properties":{"bucket_name":{"type":"string","description":"Globally unique bucket name (S3 naming rules apply)","example":"my-app-uploads"},"location_code":{"type":"string","description":"Location code","example":"FIN-03"}},"required":["bucket_name","location_code"]},"BucketNameAvailabilityResponseDto":{"type":"object","properties":{"is_available":{"type":"boolean","description":"Whether the bucket name is available for use","example":true}},"required":["is_available"]},"ContainerRegistryPricingResponseDto":{"type":"object","properties":{"price_per_month_per_gb":{"type":"number","description":"Price per GB per month","example":0.2},"currency":{"type":"string","description":"Currency","example":"usd","enum":["usd","eur"]}},"required":["price_per_month_per_gb","currency"]},"GroupInstanceResponseDto":{"type":"object","properties":{"id":{"type":"string"},"hostname":{"type":"string"},"status":{"type":"string"}},"required":["id","hostname","status"]},"InstanceGroupResponseDto":{"type":"object","properties":{"id":{"type":"string"},"project_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"object","nullable":true},"location_code":{"type":"string"},"instance_type":{"type":"string"},"template":{"type":"object","description":"The instance template stored by the group."},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"deleted_at":{"type":"object","nullable":true,"description":"Non-null only on a tombstoned group. Public and internal reads return live groups only."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/GroupInstanceResponseDto"}},"size":{"type":"number","description":"Number of live instances in the group."}},"required":["id","project_id","name","description","location_code","instance_type","template","created_at","updated_at","deleted_at","instances","size"]},"InstanceGroupOsVolumeDto":{"type":"object","properties":{"size":{"type":"number","example":200,"description":"Default and minimum OS volume size in GB for instances created in this group."}},"required":["size"]},"InstanceGroupTemplateDto":{"type":"object","properties":{"image":{"type":"string","example":"ubuntu-24.04-cuda-12.8-docker"},"os_volume":{"$ref":"#/components/schemas/InstanceGroupOsVolumeDto"},"ssh_key_ids":{"description":"Default SSH keys for instances created from this group.","type":"array","items":{"type":"string"}},"startup_script_id":{"type":"string","description":"Default startup script for instances created from this group."}},"required":["image"]},"CreateInstanceGroupDto":{"type":"object","properties":{"name":{"type":"string","example":"hive-b300-pool-1"},"description":{"type":"string"},"location_code":{"type":"string","example":"FIN-02"},"instance_type":{"type":"string","example":"8B300.640S.176V","description":"A known instance type code. Fixed for the life of the group."},"template":{"$ref":"#/components/schemas/InstanceGroupTemplateDto"}},"required":["name","location_code","instance_type","template"]},"MutableInstanceGroupTemplateDto":{"type":"object","properties":{"ssh_key_ids":{"type":"array","items":{"type":"string"}},"startup_script_id":{"type":"object","nullable":true}}},"UpdateInstanceGroupDto":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"object","nullable":true},"template":{"description":"Mutable template defaults.","allOf":[{"$ref":"#/components/schemas/MutableInstanceGroupTemplateDto"}]}}},"DeploymentLogEntryPublicApiResponseDto":{"type":"object","properties":{"timestamp":{"type":"string","description":"Log line timestamp, ISO 8601 with nanosecond precision.","example":"2026-06-01T12:00:00.123456789Z"},"container_name":{"type":"string","description":"Name of the container that produced the log line.","example":"app"},"replica":{"type":"string","description":"Name of the replica (pod) that produced the log line.","example":"my-deployment-6f9c8b7d5-x2abc"},"message":{"type":"string","description":"The log line content.","example":"GET /healthz 200"}},"required":["timestamp","container_name","replica","message"]},"CreateScaledJobContainerRegistryCredentialsDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the secret containing the container registry credentials","example":"dockerhub-credentials"}},"required":["name"]},"CreateScaledJobContainerRegistrySettings":{"type":"object","properties":{"credentials":{"description":"Container registry credentials used for authorized access to private container registries. Currently, credentials must be created via the DataCrunch Cloud UI. Provide the name of the created credentials here.","allOf":[{"$ref":"#/components/schemas/CreateScaledJobContainerRegistryCredentialsDto"}]}}},"CreateScaledJobContainerHealthcheckSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Is healthcheck enabled for the container. It it used to check if the container is ready to accept traffic","example":true},"port":{"type":"integer","description":"Port to be used for healthcheck","example":8081,"format":"int32","minimum":1,"maximum":65535},"path":{"type":"string","description":"Path to be used for healthcheck","example":"/health"}},"required":["enabled","port","path"]},"CreateScaledJobContainerEntrypointOverridesSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Is the default docker start command and arguments overridden","example":true},"entrypoint":{"description":"Entrypoint command to start the container","example":["python3","main.py"],"type":"array","items":{"type":"string"}},"cmd":{"description":"Arguments to the entrypoint command","example":["--port","8080"],"type":"array","items":{"type":"string"}}},"required":["enabled"]},"CreateScaledJobContainerEnvVar":{"type":"object","properties":{"name":{"type":"string","description":"Name of the environment variable","example":"MY_ENV_VAR"},"value_or_reference_to_secret":{"type":"string","description":"Value of the environment variable, or a reference to the secret","example":"my-value"},"type":{"type":"string","description":"Type of the environment variable","example":"plain","enum":["plain","secret"]}},"required":["name","value_or_reference_to_secret","type"]},"CreateScaledJobContainerVolumeMount":{"type":"object","properties":{"type":{"type":"string","description":"Type of the volume","examples":["scratch","secret","memory","shared"],"enum":["scratch","shared","secret","memory"]},"mount_path":{"type":"string","description":"Path in the container where the volume will be mounted","example":"/data"},"secret_name":{"type":"string","description":"Name of the secret to be mounted, if volume type is \"secret\"","example":"my-secret"},"size_in_mb":{"type":"integer","description":"Size of volume in MiB, if volume type is \"memory\"","enum":[64,128,256,512,1024,2048,4096,8192,16384,32768],"examples":[64,128,256,512,1024,2048,4096,8192,16384,32768],"format":"int32"},"volumeId":{"type":"string","description":"Volume id of the shared storage","example":"fa4a0338-65b2-4819-8450-821190fbaf6d"}},"required":["type","mount_path","volumeId"]},"CreateScaledJobContainerDto":{"type":"object","properties":{"image":{"type":"string","description":"Image to be deployed in the container","example":"registry-1.docker.io/chentex/random-logger:v1.0.1"},"should_use_cached_image":{"type":"boolean","description":"Pull the image through the platform image cache. Applies only to public Docker Hub images. Has no effect for images from other registries, or when registry credentials are set. When the cache is used, registry credentials are not needed to avoid Docker Hub rate limits, because the cache pulls with a platform account. Without the cache, this does not apply.","example":true,"default":true},"exposed_port":{"type":"integer","description":"Port to be exposed by the container","example":8080,"format":"int32","minimum":1,"maximum":65535},"healthcheck":{"description":"Healthcheck settings for the container","allOf":[{"$ref":"#/components/schemas/CreateScaledJobContainerHealthcheckSettings"}]},"entrypoint_overrides":{"description":"Entrypoint overrides settings for the container","allOf":[{"$ref":"#/components/schemas/CreateScaledJobContainerEntrypointOverridesSettings"}]},"env":{"description":"Environment variables for the container","type":"array","items":{"$ref":"#/components/schemas/CreateScaledJobContainerEnvVar"}},"volume_mounts":{"description":"Volume mounts for the container","type":"array","items":{"$ref":"#/components/schemas/CreateScaledJobContainerVolumeMount"}}},"required":["image","exposed_port"]},"CreateScaledJobComputeResourceDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the compute resource","example":"H100"},"size":{"type":"integer","description":"Number of compute units (e.g. 4 GPUs). Default is 1","examples":[1,2,4,8,16,32],"default":1,"format":"int32","minimum":1,"maximum":128}},"required":["name","size"]},"CreateScaledJobScalingOptionsDto":{"type":"object","properties":{"max_replica_count":{"type":"integer","description":"Maximum number of replicas","example":1,"format":"int32","minimum":1,"maximum":1000},"queue_message_ttl_seconds":{"type":"integer","description":"Duration in seconds after which messages in the queue will be dropped","example":300,"format":"int32","minimum":0,"maximum":604800},"deadline_seconds":{"type":"integer","description":"Duration in seconds that a job may run before the system attempts to terminate it.","format":"int32","minimum":600,"maximum":604800}},"required":["max_replica_count","queue_message_ttl_seconds","deadline_seconds"]},"CreateScaledJobDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the job deployment. Immutable after creation","example":"flux-training"},"container_registry_settings":{"description":"Container registry settings","allOf":[{"$ref":"#/components/schemas/CreateScaledJobContainerRegistrySettings"}]},"containers":{"description":"Containers to be deployed","type":"array","items":{"$ref":"#/components/schemas/CreateScaledJobContainerDto"}},"compute":{"description":"Compute settings for the job deployment","allOf":[{"$ref":"#/components/schemas/CreateScaledJobComputeResourceDto"}]},"scaling":{"description":"Scaling settings for the job deployment","allOf":[{"$ref":"#/components/schemas/CreateScaledJobScalingOptionsDto"}]}},"required":["name","containers","compute","scaling"]},"PatchScaledJobContainerDto":{"type":"object","properties":{"image":{"type":"string","description":"Image to be deployed in the container","example":"registry-1.docker.io/chentex/random-logger:v1.0.1"},"should_use_cached_image":{"type":"boolean","description":"Pull the image through the platform image cache. Applies only to public Docker Hub images. Has no effect for images from other registries, or when registry credentials are set. When the cache is used, registry credentials are not needed to avoid Docker Hub rate limits, because the cache pulls with a platform account. Without the cache, this does not apply. If `image` is not sent, the setting applies to the current image. If `image` is sent without this field, the current setting is kept.","example":true,"default":true},"exposed_port":{"type":"integer","description":"Port to be exposed by the container","example":8080,"format":"int32","minimum":1,"maximum":65535},"healthcheck":{"description":"Healthcheck settings for the container","allOf":[{"$ref":"#/components/schemas/CreateScaledJobContainerHealthcheckSettings"}]},"entrypoint_overrides":{"description":"Entrypoint overrides settings for the container","allOf":[{"$ref":"#/components/schemas/CreateScaledJobContainerEntrypointOverridesSettings"}]},"env":{"description":"Environment variables for the container","type":"array","items":{"$ref":"#/components/schemas/CreateScaledJobContainerEnvVar"}},"volume_mounts":{"description":"Volume mounts for the container","type":"array","items":{"$ref":"#/components/schemas/CreateScaledJobContainerVolumeMount"}},"name":{"type":"string","description":"Name of the container to update","example":"video-generator-0"}},"required":["name"]},"PatchScaledJobScalingOptionsDto":{"type":"object","properties":{"max_replica_count":{"type":"integer","description":"Maximum number of replicas","example":1,"format":"int32","minimum":1,"maximum":1000},"queue_message_ttl_seconds":{"type":"integer","description":"Duration in seconds after which messages in the queue will be dropped","example":300,"format":"int32","minimum":0,"maximum":604800},"deadline_seconds":{"type":"integer","description":"Duration in seconds that a job may run before the system attempts to terminate it.","format":"int32","minimum":600,"maximum":604800}}},"PatchScaledJobDto":{"type":"object","properties":{"container_registry_settings":{"description":"Container registry settings","example":{"credentials":{"name":"dockerhub-credentials"}},"allOf":[{"$ref":"#/components/schemas/CreateScaledJobContainerRegistrySettings"}]},"containers":{"description":"Containers properties to be updated","type":"array","items":{"$ref":"#/components/schemas/PatchScaledJobContainerDto"}},"compute":{"description":"Compute settings for the job deployment","allOf":[{"$ref":"#/components/schemas/CreateScaledJobComputeResourceDto"}]},"scaling":{"description":"Scaling settings for the job deployment","allOf":[{"$ref":"#/components/schemas/PatchScaledJobScalingOptionsDto"}]}}},"ComputeResource":{"type":"object","properties":{"name":{"type":"string","description":"Name of the compute resource","example":"H100"},"size":{"type":"integer","description":"Number of compute units (e.g. 4 GPUs). Default is 1","examples":[1,2,4,8,16,32],"default":1,"format":"int32","minimum":1,"maximum":128}},"required":["name","size"]},"ScaledJobShortInfoResponseDto":{"type":"object","properties":{"name":{"type":"string","description":"Job deployment name","example":"flux-training"},"created_at":{"format":"date-time","type":"string","example":"2021-08-31T12:00:00.000Z"},"created_by_user_id":{"type":"string","description":"ID of the user who created the job","example":"0576ee4a-d45c-44b8-b2be-d8ad0347cb46"},"compute":{"description":"Compute resource details","allOf":[{"$ref":"#/components/schemas/ComputeResource"}]}},"required":["name","created_at","created_by_user_id","compute"]},"ImageInfoResponseDto":{"type":"object","properties":{"image":{"type":"string","description":"The full image reference including registry, image name, and tag (e.g., Docker image URL)","example":"registry-1.docker.io/chentex/random-logger:v1.0.1"},"last_updated_at":{"type":"string","description":"The ISO 8601 timestamp indicating when the container image was last updated","example":"2026-11-06T15:24:40.018Z"}},"required":["image"]},"HealthcheckSettingsResponseDto":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Is healthcheck enabled for the container. It it used to check if the container is ready to accept traffic","example":true},"port":{"type":"integer","description":"Port to be used for healthcheck","example":8081,"format":"int32"},"path":{"type":"string","description":"Path to be used for healthcheck","example":"/health"}},"required":["enabled","port","path"]},"EntrypointOverridesSettingsResponseDto":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Is the default docker start command and arguments overridden","example":true},"entrypoint":{"description":"Entrypoint command to start the container","example":["python3","main.py"],"type":"array","items":{"type":"string"}},"cmd":{"description":"Arguments to the entrypoint command","example":["--port","8080"],"type":"array","items":{"type":"string"}}},"required":["enabled"]},"EnvVarResponseDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the environment variable","example":"MY_ENV_VAR"},"value_or_reference_to_secret":{"type":"string","description":"Value of the environment variable, or a reference to the secret","example":"my-value"},"type":{"type":"string","description":"Type of the environment variable","example":"plain","enum":["plain","secret"]}},"required":["name","value_or_reference_to_secret","type"]},"VolumeMountResponseDto":{"type":"object","properties":{"type":{"type":"string","description":"Type of the volume","examples":["scratch","secret","memory","shared"],"enum":["scratch","shared","secret","memory"]},"mount_path":{"type":"string","description":"Path in the container where the volume will be mounted","example":"/data"},"secret_name":{"type":"string","description":"Name of the secret to be mounted, if volume type is \"secret\"","example":"my-secret"},"size_in_mb":{"type":"integer","description":"Size of volume in MiB, if volume type is \"memory\"","enum":[64,128,256,512,1024,2048,4096,8192,16384,32768],"examples":[64,128,256,512,1024,2048,4096,8192,16384,32768],"format":"int32"},"volume_id":{"type":"string","description":"Volume id of the shared storage, if volume type is \"shared\"","example":"fa4a0338-65b2-4819-8450-821190fbaf6d"}},"required":["type","mount_path"]},"ContainerResponseDto":{"type":"object","properties":{"name":{"type":"string","description":"Container name","example":"random-logger-0"},"image":{"description":"Image details","allOf":[{"$ref":"#/components/schemas/ImageInfoResponseDto"}]},"exposed_port":{"type":"integer","description":"Port to be exposed by the container","example":8080,"format":"int32"},"healthcheck":{"description":"Healthcheck settings for the container","allOf":[{"$ref":"#/components/schemas/HealthcheckSettingsResponseDto"}]},"entrypoint_overrides":{"description":"Entrypoint overrides settings for the container","allOf":[{"$ref":"#/components/schemas/EntrypointOverridesSettingsResponseDto"}]},"env":{"description":"Environment variables for the container","type":"array","items":{"$ref":"#/components/schemas/EnvVarResponseDto"}},"volume_mounts":{"description":"Volume mounts for the container","type":"array","items":{"$ref":"#/components/schemas/VolumeMountResponseDto"}},"should_use_cached_image":{"type":"boolean","description":"The image cache setting of the container. The image is pulled through the cache only when this is true, the image is from Docker Hub, and no registry credentials are set.","example":false}},"required":["name","image","exposed_port","env","volume_mounts","should_use_cached_image"]},"ContainerRegistryCredentialsResponseDto":{"type":"object","properties":{"name":{"type":"string","description":"Credential name of the secret containing the credentials","example":"dockerhub-credentials"}},"required":["name"]},"ContainerRegistrySettingsResponseDto":{"type":"object","properties":{"is_private":{"type":"boolean","description":"Privacy mode of the container registry - is it public or private","example":true},"credentials":{"description":"Credential details for the registry if it is private. Required if privacy mode is private","allOf":[{"$ref":"#/components/schemas/ContainerRegistryCredentialsResponseDto"}]}},"required":["is_private","credentials"]},"ScaledJobResponseDto":{"type":"object","properties":{"name":{"type":"string","description":"Job name","example":"flux-training"},"containers":{"description":"Containers in the job deployment","type":"array","items":{"$ref":"#/components/schemas/ContainerResponseDto"}},"endpoint_base_url":{"type":"string","description":"The base URL of the endpoint","example":"https://containers.datacrunch.io/flux-training"},"created_at":{"type":"string","example":"2021-08-31T12:00:00.000Z"},"created_by_user_id":{"type":"string","description":"ID of the user who created the job","example":"0576ee4a-d45c-44b8-b2be-d8ad0347cb46"},"compute":{"description":"Compute resource details","allOf":[{"$ref":"#/components/schemas/ComputeResource"}]},"container_registry_settings":{"description":"Container registry settings","allOf":[{"$ref":"#/components/schemas/ContainerRegistrySettingsResponseDto"}]}},"required":["name","containers","endpoint_base_url","created_at","created_by_user_id","compute","container_registry_settings"]},"ScalingOptionsResponseDto":{"type":"object","properties":{"max_replica_count":{"type":"integer","description":"Maximum number of replicas","format":"int32"},"queue_message_ttl_seconds":{"type":"integer","description":"Duration in seconds after which messages in the queue will be dropped","format":"int32"},"deadline_seconds":{"type":"integer","description":"Duration in seconds that a job may run before the system attempts to terminate it.","format":"int32","minimum":600,"maximum":604800}},"required":["max_replica_count","queue_message_ttl_seconds","deadline_seconds"]},"GetScaledJobStatusResponseDto":{"type":"object","properties":{"status":{"type":"string","description":"Status of the job deployment","example":"ready","enum":["paused","terminating","running","ready"]}},"required":["status"]},"HealthcheckSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Is healthcheck enabled for the container. It it used to check if the container is ready to accept traffic","example":true},"port":{"type":"integer","description":"Port to be used for healthcheck","example":8081,"format":"int32","minimum":1,"maximum":65535},"path":{"type":"string","description":"Path to be used for healthcheck","example":"/health"}},"required":["enabled","port","path"]},"EntrypointOverridesSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Is the default docker start command and arguments overridden","example":true},"entrypoint":{"description":"Entrypoint command to start the container","example":["python3","main.py"],"type":"array","items":{"type":"string"}},"cmd":{"description":"Arguments to the entrypoint command","example":["--port","8080"],"type":"array","items":{"type":"string"}}},"required":["enabled"]},"EnvVarPublicApi":{"type":"object","properties":{"name":{"type":"string","description":"Name of the environment variable","example":"MY_ENV_VAR"},"value_or_reference_to_secret":{"type":"string","description":"Value of the environment variable, or a reference to the secret","example":"my-value"},"type":{"type":"string","description":"Type of the environment variable","example":"plain","enum":["plain","secret"]}},"required":["name","value_or_reference_to_secret","type"]},"ContainerPublicApiResponseDto":{"type":"object","properties":{"should_use_cached_image":{"type":"boolean","description":"Pull the image through the platform image cache. Applies only to public Docker Hub images. Has no effect for images from other registries, or when registry credentials are set. When the cache is used, registry credentials are not needed to avoid Docker Hub rate limits, because the cache pulls with a platform account. Without the cache, this does not apply.","example":true,"default":true},"exposed_port":{"type":"integer","description":"Port to be exposed by the container","example":8080,"format":"int32","minimum":1,"maximum":65535},"healthcheck":{"description":"Healthcheck settings for the container","allOf":[{"$ref":"#/components/schemas/HealthcheckSettings"}]},"entrypoint_overrides":{"description":"Entrypoint overrides settings for the container","allOf":[{"$ref":"#/components/schemas/EntrypointOverridesSettings"}]},"env":{"description":"Environment variables for the container","type":"array","items":{"$ref":"#/components/schemas/EnvVarPublicApi"}},"volume_mounts":{"type":"array","description":"Volume mounts for the container","items":{"oneOf":[{"$ref":"#/components/schemas/ScratchVolumeMountDto","description":"Scratch volume mount"},{"$ref":"#/components/schemas/SecretVolumeMountDto","description":"Secret volume mount"},{"$ref":"#/components/schemas/SharedVolumeMountDto","description":"Shared filesystem volume mount"},{"$ref":"#/components/schemas/MemoryVolumeMountDto","description":"Memory volume mount"}]}},"image":{"type":"object","description":"Image details","example":{"image":"registry-1.docker.io/chentex/random-logger:v1.0.1","last_updated_at":"2026-11-06T15:24:40.407Z"}},"name":{"type":"string","description":"Container name","example":"random-logger-0"}},"required":["exposed_port","image","name"]},"ContainerRegistryCredentials":{"type":"object","properties":{"name":{"type":"string","description":"Credential name of the secret containing the credentials","example":"dockerhub-credentials"}},"required":["name"]},"ContainerRegistrySettingsPublicApiDto":{"type":"object","properties":{"is_private":{"type":"boolean","description":"Privacy mode of the container registry - is it public or private","example":true},"credentials":{"description":"Credential details for the registry if it is private. Required if privacy mode is private","allOf":[{"$ref":"#/components/schemas/ContainerRegistryCredentials"}]}},"required":["is_private","credentials"]},"DeploymentPublicApiResponseDto":{"type":"object","properties":{"name":{"type":"string","description":"Deployment name","example":"flux"},"containers":{"description":"Containers in the deployment","type":"array","items":{"$ref":"#/components/schemas/ContainerPublicApiResponseDto"}},"endpoint_base_url":{"type":"string","description":"The base URL of the endpoint","example":"https://containers.datacrunch.io/flux"},"created_at":{"type":"string","example":"2021-08-31T12:00:00.000Z"},"compute":{"description":"Compute resource details","allOf":[{"$ref":"#/components/schemas/ComputeResource"}]},"container_registry_settings":{"description":"Container registry settings","allOf":[{"$ref":"#/components/schemas/ContainerRegistrySettingsPublicApiDto"}]},"is_spot":{"type":"boolean","example":false}},"required":["name","containers","endpoint_base_url","created_at","compute","container_registry_settings","is_spot"]},"ScratchVolumeMountDto":{"type":"object","properties":{"type":{"type":"string","description":"Type of the volume","examples":["scratch"],"enum":["scratch"]},"mount_path":{"type":"string","description":"Path in the container where the volume will be mounted","example":"/data"}},"required":["type","mount_path"]},"SecretVolumeMountDto":{"type":"object","properties":{"type":{"type":"string","description":"Type of the volume","examples":["secret"],"enum":["secret"]},"mount_path":{"type":"string","description":"Path in the container where the volume will be mounted.","example":"/secret-files"},"secret_name":{"type":"string","description":"Name of the fileset secret to be mounted","example":"my-secret"}},"required":["type","mount_path","secret_name"]},"MemoryVolumeMountDto":{"type":"object","properties":{"type":{"type":"string","description":"Type of the volume","examples":["memory"],"enum":["memory"]},"mount_path":{"type":"string","description":"Path in the container where the volume will be mounted. This setting is fixed for now and cannot be changed","example":"/dev/shm","default":"/dev/shm"},"size_in_mb":{"type":"integer","description":"Size of memory volume in MiB","enum":[64,128,256,512,1024,2048,4096,8192,16384,32768],"examples":[64,128,256,512,1024,2048,4096,8192,16384,32768],"format":"int32"}},"required":["type","mount_path","size_in_mb"]},"SharedVolumeMountDto":{"type":"object","properties":{"type":{"type":"string","description":"Type of the volume","examples":["shared"],"enum":["shared"]},"mount_path":{"type":"string","description":"Path in the container where the volume will be mounted.","example":"/shared"},"volume_id":{"type":"string","description":"ID of the shared volume to be mounted","example":"b94cf73c-33ee-472f-8aaa-23590dfcf570"}},"required":["type","mount_path","volume_id"]},"ContainerPublicApiDto":{"type":"object","properties":{"image":{"type":"string","description":"Image to be deployed in the container","example":"registry-1.docker.io/chentex/random-logger:v1.0.1"},"should_use_cached_image":{"type":"boolean","description":"Pull the image through the platform image cache. Applies only to public Docker Hub images. Has no effect for images from other registries, or when registry credentials are set. When the cache is used, registry credentials are not needed to avoid Docker Hub rate limits, because the cache pulls with a platform account. Without the cache, this does not apply.","example":true,"default":true},"exposed_port":{"type":"integer","description":"Port to be exposed by the container","example":8080,"format":"int32","minimum":1,"maximum":65535},"healthcheck":{"description":"Healthcheck settings for the container","allOf":[{"$ref":"#/components/schemas/HealthcheckSettings"}]},"entrypoint_overrides":{"description":"Entrypoint overrides settings for the container","allOf":[{"$ref":"#/components/schemas/EntrypointOverridesSettings"}]},"env":{"description":"Environment variables for the container","type":"array","items":{"$ref":"#/components/schemas/EnvVarPublicApi"}},"volume_mounts":{"type":"array","description":"Volume mounts for the container","items":{"oneOf":[{"$ref":"#/components/schemas/ScratchVolumeMountDto","description":"Scratch volume mount"},{"$ref":"#/components/schemas/SecretVolumeMountDto","description":"Secret volume mount"},{"$ref":"#/components/schemas/SharedVolumeMountDto","description":"Shared filesystem volume mount"},{"$ref":"#/components/schemas/MemoryVolumeMountDto","description":"Memory volume mount"}]}}},"required":["image","exposed_port"]},"ScalingPolicy":{"type":"object","properties":{"delay_seconds":{"type":"integer","description":"Cooldown period in seconds before the deployment scales up or down","example":300,"format":"int32","minimum":0,"maximum":3600}},"required":["delay_seconds"]},"QueueLoadScalingTrigger":{"type":"object","properties":{"threshold":{"type":"number","description":"Threshold value for queue load. Queue item to replica ratio","example":2}},"required":["threshold"]},"UtilizationScalingTrigger":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Is the trigger enabled","example":true},"threshold":{"type":"integer","description":"Threshold value for utilization, in percent","example":80,"format":"int32","minimum":5,"maximum":100}},"required":["enabled","threshold"]},"ScalingTriggers":{"type":"object","properties":{"queue_load":{"description":"Scaling trigger based on queue load","allOf":[{"$ref":"#/components/schemas/QueueLoadScalingTrigger"}]},"cpu_utilization":{"description":"Scaling trigger based on CPU utilization by percentage","allOf":[{"$ref":"#/components/schemas/UtilizationScalingTrigger"}]},"gpu_utilization":{"description":"Scaling trigger based on GPU utilization by percentage. Not supported on CPU compute.","allOf":[{"$ref":"#/components/schemas/UtilizationScalingTrigger"}]}},"required":["queue_load","cpu_utilization","gpu_utilization"]},"CreateScalingOptionsPublicApiDto":{"type":"object","properties":{"min_replica_count":{"type":"integer","description":"Minimum number of replicas","format":"int32","minimum":0,"maximum":1000},"max_replica_count":{"type":"integer","description":"Maximum number of replicas","format":"int32","minimum":1,"maximum":1000},"scale_down_policy":{"description":"Policy for scaling down replicas","allOf":[{"$ref":"#/components/schemas/ScalingPolicy"}]},"scale_up_policy":{"description":"Policy for scaling up replicas","allOf":[{"$ref":"#/components/schemas/ScalingPolicy"}]},"queue_message_ttl_seconds":{"type":"integer","description":"Duration in seconds after which messages in the queue will be dropped","format":"int32","minimum":0,"maximum":86400},"concurrent_requests_per_replica":{"type":"integer","description":"Number of requests each replica can process concurrently. Set this number higher for LLM endpoints, and to 1 for image generation endpoints.","format":"int32","minimum":1,"maximum":5000},"scaling_triggers":{"description":"Triggers for scaling up and down","allOf":[{"$ref":"#/components/schemas/ScalingTriggers"}]}},"required":["min_replica_count","max_replica_count","scale_down_policy","scale_up_policy","queue_message_ttl_seconds","concurrent_requests_per_replica","scaling_triggers"]},"CreateDeploymentPublicApiDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the deployment. Immutable after creation","example":"llm-inference"},"container_registry_settings":{"description":"Container registry settings. Private registries require saving the credentials via datacrunch cloud UI","allOf":[{"$ref":"#/components/schemas/ContainerRegistrySettingsPublicApiDto"}]},"containers":{"description":"Containers to be deployed","type":"array","items":{"$ref":"#/components/schemas/ContainerPublicApiDto"}},"compute":{"description":"Compute settings for the deployment","allOf":[{"$ref":"#/components/schemas/ComputeResource"}]},"scaling":{"description":"Scaling settings for the deployment","allOf":[{"$ref":"#/components/schemas/CreateScalingOptionsPublicApiDto"}]},"is_spot":{"type":"boolean","description":"Is the deployment a spot deployment","example":false,"default":false},"is_inferno":{"type":"boolean","description":"Declare the workload is an inferno image (built by `inferno build`).","example":false,"default":false}},"required":["name","container_registry_settings","containers","compute","scaling"]},"GetDeploymentStatusResponseDto":{"type":"object","properties":{"status":{"type":"string","description":"Status of the deployment","example":"healthy","enum":["initializing","healthy","degraded","unhealthy","paused","quota_reached","image_pulling","updating","terminating"]}},"required":["status"]},"AutoupdateSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Is autoupdate enabled for the container","example":true},"mode":{"type":"string","description":"Autoupdate mode for the container","example":"latest","enum":["latest","semantic"]},"tag_filter":{"type":"string","description":"Tag filter for the autoupdate. Supports regex","example":"^v?1.0.d+$"}},"required":["enabled","mode"]},"PatchContainerPublicApiDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the container to update","example":"random-logger-0"},"image":{"type":"string","description":"Image to be deployed in the container","example":"registry-1.docker.io/chentex/random-logger:v1.0.1"},"should_use_cached_image":{"type":"boolean","description":"Pull the image through the platform image cache. Applies only to public Docker Hub images. Has no effect for images from other registries, or when registry credentials are set. When the cache is used, registry credentials are not needed to avoid Docker Hub rate limits, because the cache pulls with a platform account. Without the cache, this does not apply. If `image` is not sent, the setting applies to the current image. If `image` is sent without this field, the current setting is kept.","example":true},"exposed_port":{"type":"integer","description":"Port to be exposed by the container","example":8080,"format":"int32","minimum":1,"maximum":65535},"healthcheck":{"description":"Healthcheck settings for the container","allOf":[{"$ref":"#/components/schemas/HealthcheckSettings"}]},"entrypoint_overrides":{"description":"Entrypoint overrides settings for the container","allOf":[{"$ref":"#/components/schemas/EntrypointOverridesSettings"}]},"env":{"description":"Environment variables for the container","type":"array","items":{"$ref":"#/components/schemas/EnvVarPublicApi"}},"autoupdate":{"description":"Container image autoupdate settings for the container","allOf":[{"$ref":"#/components/schemas/AutoupdateSettings"}]},"volume_mounts":{"type":"array","description":"Volume mounts for the container","items":{"oneOf":[{"$ref":"#/components/schemas/ScratchVolumeMountDto","description":"Scratch volume mount"},{"$ref":"#/components/schemas/SecretVolumeMountDto","description":"Secret volume mount"},{"$ref":"#/components/schemas/SharedVolumeMountDto","description":"Shared filesystem volume mount"},{"$ref":"#/components/schemas/MemoryVolumeMountDto","description":"Memory volume mount"}]}}},"required":["name"]},"PatchDeploymentPublicApiDto":{"type":"object","properties":{"container_registry_settings":{"description":"Container registry settings. Private registries require saving the credentials via datacrunch cloud UI","example":{"is_private":true,"credentials":{"name":"dockerhub-credentials"}},"allOf":[{"$ref":"#/components/schemas/ContainerRegistrySettingsPublicApiDto"}]},"containers":{"description":"Containers properties to be updated","type":"array","items":{"$ref":"#/components/schemas/PatchContainerPublicApiDto"}},"compute":{"description":"Change compute settings for the deployment","allOf":[{"$ref":"#/components/schemas/ComputeResource"}]},"is_spot":{"type":"boolean","description":"Spot instance settings for the deployment","example":false}}},"ScalingOptionsPublicApiDto":{"type":"object","properties":{"min_replica_count":{"type":"integer","description":"Minimum number of replicas","example":1,"format":"int32","minimum":0,"maximum":1000},"max_replica_count":{"type":"integer","description":"Maximum number of replicas","example":50,"format":"int32","minimum":1,"maximum":1000},"scale_down_policy":{"description":"Policy for scaling down replicas","example":{"delay_seconds":300},"allOf":[{"$ref":"#/components/schemas/ScalingPolicy"}]},"scale_up_policy":{"description":"Policy for scaling up replicas","example":{"delay_seconds":300},"allOf":[{"$ref":"#/components/schemas/ScalingPolicy"}]},"queue_message_ttl_seconds":{"type":"integer","description":"Duration in seconds after which messages in the queue will be dropped","example":500,"format":"int32","minimum":0,"maximum":86400},"concurrent_requests_per_replica":{"type":"integer","description":"Number of requests each replica can process concurrently.","example":1,"format":"int32","minimum":1,"maximum":5000},"scaling_triggers":{"description":"Triggers for scaling up and down","allOf":[{"$ref":"#/components/schemas/ScalingTriggers"}]}},"required":["min_replica_count","max_replica_count","scale_down_policy","scale_up_policy","queue_message_ttl_seconds","concurrent_requests_per_replica","scaling_triggers"]},"PatchScalingTriggers":{"type":"object","properties":{"queue_load":{"description":"Scaling trigger based on queue load. Leave it out or set it to null to keep the current value.","nullable":true,"allOf":[{"$ref":"#/components/schemas/QueueLoadScalingTrigger"}]},"cpu_utilization":{"description":"Scaling trigger based on CPU utilization by percentage. Leave it out or set it to null to keep the current value. To turn it off, set enabled to false.","nullable":true,"allOf":[{"$ref":"#/components/schemas/UtilizationScalingTrigger"}]},"gpu_utilization":{"description":"Scaling trigger based on GPU utilization by percentage. Not supported on CPU compute. Leave it out or set it to null to keep the current value. To turn it off, set enabled to false.","nullable":true,"allOf":[{"$ref":"#/components/schemas/UtilizationScalingTrigger"}]}}},"PatchScalingOptionsPublicApiDto":{"type":"object","properties":{"min_replica_count":{"type":"integer","description":"Minimum number of replicas","example":1,"format":"int32","minimum":0,"maximum":1000},"max_replica_count":{"type":"integer","description":"Maximum number of replicas","example":50,"format":"int32","minimum":1,"maximum":1000},"scale_down_policy":{"description":"Policy for scaling down replicas","example":{"delay_seconds":300},"allOf":[{"$ref":"#/components/schemas/ScalingPolicy"}]},"scale_up_policy":{"description":"Policy for scaling up replicas","example":{"delay_seconds":300},"allOf":[{"$ref":"#/components/schemas/ScalingPolicy"}]},"queue_message_ttl_seconds":{"type":"integer","description":"Duration in seconds after which messages in the queue will be dropped","example":500,"format":"int32","minimum":0,"maximum":86400},"concurrent_requests_per_replica":{"type":"integer","description":"Number of requests each replica can process concurrently.","example":1,"format":"int32","minimum":1,"maximum":5000},"scaling_triggers":{"description":"Triggers for scaling up and down. A trigger that you leave out or set to null keeps its current value.","allOf":[{"$ref":"#/components/schemas/PatchScalingTriggers"}]}}},"ReplicaInfo":{"type":"object","properties":{"id":{"type":"string","description":"Replica ID","example":"v4cb4"},"status":{"type":"string","description":"Replica status","example":"running","enum":["unavailable","initializing","running","terminating","error","imagepulling"]},"started_at":{"type":"string","description":"Time when the replica was started, ISO 8601 string format","example":"2021-06-14T12:00:00Z"},"image":{"type":"string","description":"Full container image reference","example":"docker.io/library/nginx:1.21"},"image_name":{"type":"string","description":"Container image name","example":"nginx"},"image_tag":{"type":"string","description":"Container image tag","example":"1.21"}},"required":["id","status","started_at"]},"ReplicasPublicApiDto":{"type":"object","properties":{"list":{"description":"List of replicas for the deployment","type":"array","items":{"$ref":"#/components/schemas/ReplicaInfo"}}},"required":["list"]},"GetDeploymentEnvVariablesPublicApiResponseDto":{"type":"object","properties":{"container_name":{"type":"string","description":"Container name","example":"flux-0"},"env":{"description":"Environment variables for the container","type":"array","items":{"$ref":"#/components/schemas/EnvVarPublicApi"}}},"required":["container_name","env"]},"CreateOrPatchEnvironmentVariablesDto":{"type":"object","properties":{"container_name":{"type":"string","description":"Container name","example":"flux-0"},"env":{"description":"Environment variables for the container","type":"array","items":{"$ref":"#/components/schemas/EnvVarPublicApi"}}},"required":["container_name","env"]},"DeleteEnvironmentVariablesPublicApiDto":{"type":"object","properties":{"container_name":{"type":"string","description":"Container name","example":"flux-0"},"env":{"description":"List of environment variable names to delete","example":["MY_ENV_VAR","MY_OTHER_ENV_VAR"],"type":"array","items":{"type":"string"}}},"required":["container_name","env"]},"GetComputeResourcesPublicApiResponseDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the compute resource","example":"H100"},"size":{"type":"integer","description":"Number of compute units (e.g. 4 GPUs). Default is 1","examples":[1,2,4,8,16,32],"default":1,"format":"int32","minimum":1,"maximum":128},"is_available":{"type":"boolean","description":"Is the compute resource available","example":true}},"required":["name","size","is_available"]},"GetSecretsPublicApiResponseDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the secret","example":"api-token"},"created_at":{"type":"string","description":"The date when the secret was created","example":"2020-08-12T12:00:00.000Z"},"secret_type":{"type":"string","description":"Type of the secret","example":"generic","enum":["generic","file-secret"]}},"required":["name","created_at","secret_type"]},"CreateSecretPublicApiDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the secret","example":"api-token"},"value":{"type":"string","description":"Value of the secret","example":"tk_1234567890-secret"}},"required":["name","value"]},"GetFilesetSecretsPublicApiResponseDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the secret","example":"api-token"},"created_at":{"type":"string","description":"The date when the secret was created","example":"2020-08-12T12:00:00.000Z"},"secret_type":{"type":"string","description":"Type of the secret","example":"file-secret","enum":["file-secret"]},"file_names":{"description":"Names of the files contained in the fileset secret","example":["tokens.txt","config.json"],"type":"array","items":{"type":"string"}}},"required":["name","created_at","secret_type","file_names"]},"SecretFilePublicApiDto":{"type":"object","properties":{"file_name":{"type":"string","description":"Name of the file","example":"file.txt"},"base64_content":{"type":"string","description":"Base64 encoded content of the file","example":"dGVzdCBmaWxl"}},"required":["file_name","base64_content"]},"CreateFilesetSecretPublicApiDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the files secret","example":"secret-files"},"files":{"description":"List of files to store in the secret","type":"array","items":{"$ref":"#/components/schemas/SecretFilePublicApiDto"}}},"required":["name","files"]},"GetRegistryCredentialsPublicApiResponseDto":{"type":"object","properties":{"name":{"type":"string","description":"The name given to the registry credential","example":"dockerhub-credentials"},"created_at":{"type":"string","description":"The date when the registry credential was created","example":"2020-08-12T12:00:00.000Z"}},"required":["name","created_at"]},"CreateRegistryCredentialsPublicApiDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the registry credential","example":"dockerhub-credentials"},"type":{"type":"string","description":"Type of the container registry","enum":["verda","gcr","dockerhub","ghcr","aws-ecr","scaleway","custom"],"example":"dockerhub"},"username":{"type":"string","description":"Username for the Docker Hub registry, if selected type is DockerHub","example":"JADES-GS-z14-0"},"access_token":{"type":"string","description":"Access token for the registry, if selected type is DockerHub or Github","example":"dckr_pat_mRO0qZWQjwXm4KOWkUvk9w_ByP0"},"service_account_key":{"type":"string","description":"Service account key for the Google Cloud Registry (Google Artifact Registry), if selected type is GCR","example":"{\n  \"type\": \"service_account\",\n  \"project_id\": \"clever-overview-111111-b1\",\n  \"private_key_id\": \"5434a8e7108656c582b4567890b77e9eaa7501c5\",\n  \"private_key\": \"-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBg...1yAFKgXXFmIVqXPC1X\n-----END PRIVATE KEY-----\n\",\n  \"client_email\": \"test-account@clever-overview-111111-b1.iam.gserviceaccount.com\",\n  \"client_id\": \"107932416123456636077\",\n  \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\n  \"token_uri\": \"https://oauth2.googleapis.com/token\",\n  \"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\n  \"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/test-account%40clever-overview-111111-b1.iam.gserviceaccount.com\",\n  \"universe_domain\": \"googleapis.com\"\n}"},"docker_config_json":{"type":"string","description":"Docker config JSON for the custom registry, if selected type is Custom","example":"{\n  \"auths\": {\n    \"ghcr.io\": {\n      \"auth\": \"dXNlcjpwYXNzd29yZA==\"\n    }\n  }\n}"},"access_key_id":{"type":"string","description":"Access key ID for the AWS Elastic Container Registry, if selected type is AWSECR","example":"AKIAEXAMPLE123456"},"secret_access_key":{"type":"string","description":"Secret access key for the AWS Elastic Container Registry, if selected type is AWSECR","example":"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"},"region":{"type":"string","description":"Region for the AWS Elastic Container Registry, if selected type is AWSECR","example":"eu-north-1"},"ecr_repo":{"type":"string","description":"Repository for the AWS Elastic Container Registry, if selected type is AWSECR","example":"887841266746.dkr.ecr.eu-north-1.amazonaws.com"},"scaleway_domain":{"type":"string","description":"Region-specific domain, if selected type is Scaleway","example":"rg.nl-ams.scw.cloud"},"scaleway_uuid":{"type":"string","description":"API secret key, if selected type is Scaleway","example":"ea55b6d2-c789-4b31-88b1-f77ba6ff7cd6"}},"required":["name","type"]},"ContainerDeploymentTemplatePublicApiDto":{"type":"object","properties":{"id":{"type":"string","description":"Stable, URL-safe template identifier used in template paths","example":"qwen3-5-9b"},"name":{"type":"string","description":"Human-readable name of the model","example":"Qwen3.5 9B"},"description":{"type":"string","description":"Description of the model","example":"Dense multimodal model with gated delta networks hybrid attention and 262K context. Single-GPU serving."},"provider":{"type":"string","description":"Provider of the model","example":"Qwen"},"engine":{"type":"string","description":"Serving engine used by the template","example":"vllm"},"model_repository":{"type":"string","description":"Hugging Face repository the default variant loads","example":"Qwen/Qwen3.5-9B"},"parameters":{"type":"string","description":"Parameter count of the model (display string)","example":"9B"},"context_length":{"type":"integer","description":"Maximum context length in tokens","example":262144,"format":"int32"},"input_modalities":{"description":"Accepted input modalities","example":["text","image"],"type":"array","items":{"type":"string"}},"output_modalities":{"description":"Produced output modalities","example":["text"],"type":"array","items":{"type":"string"}},"tasks":{"description":"Coarse task labels","example":["text","multimodal"],"type":"array","items":{"type":"string"}},"requires_hugging_face_token":{"type":"boolean","description":"Whether a Hugging Face token is required to deploy the model (gated checkpoint)","example":false},"min_vram_gb":{"type":"integer","description":"Minimum total GPU memory in GB for the default variant","example":22,"format":"int32"},"recommended_compute":{"description":"Smallest compute configuration currently offered that fits the default variant. Null when nothing offered fits","nullable":true,"allOf":[{"$ref":"#/components/schemas/ComputeResource"}]}},"required":["id","name","description","provider","engine","model_repository","parameters","context_length","input_modalities","output_modalities","tasks","requires_hugging_face_token","min_vram_gb","recommended_compute"]},"ContainerDeploymentTemplateVariantPublicApiDto":{"type":"object","properties":{"id":{"type":"string","description":"Variant identifier, passed as `variant` when deploying","example":"fp8"},"precision":{"type":"string","description":"Weight precision","example":"fp8"},"model_repository":{"type":"string","description":"Hugging Face repository this variant loads","example":"Qwen/Qwen3.5-9B-FP8"},"min_vram_gb":{"type":"integer","description":"Minimum total GPU memory in GB","example":12,"format":"int32"},"is_default":{"type":"boolean","description":"Whether this variant is used when no variant is given","example":true},"description":{"type":"string","description":"What sets this variant apart","example":"FP8 weights and KV cache, fits a single 16 GB GPU"},"recommended_compute":{"description":"Smallest compute configuration currently offered that fits this variant. Null when nothing offered fits","nullable":true,"allOf":[{"$ref":"#/components/schemas/ComputeResource"}]}},"required":["id","precision","model_repository","min_vram_gb","is_default","recommended_compute"]},"ContainerDeploymentTemplateFeaturePublicApiDto":{"type":"object","properties":{"id":{"type":"string","description":"Feature identifier, passed in `features` when deploying","example":"tool_calling"},"name":{"type":"string","description":"Human-readable name","example":"Tool calling"},"description":{"type":"string","description":"What the feature enables","example":"Enables tool calling with the Qwen chat template"},"is_default":{"type":"boolean","description":"Whether the feature is on when no features are given","example":true},"conflicts_with":{"description":"Feature ids that cannot be enabled together with this one","example":[],"type":"array","items":{"type":"string"}}},"required":["id","name","is_default","conflicts_with"]},"ContainerDeploymentTemplateDetailPublicApiDto":{"type":"object","properties":{"id":{"type":"string","description":"Stable, URL-safe template identifier used in template paths","example":"qwen3-5-9b"},"name":{"type":"string","description":"Human-readable name of the model","example":"Qwen3.5 9B"},"description":{"type":"string","description":"Description of the model","example":"Dense multimodal model with gated delta networks hybrid attention and 262K context. Single-GPU serving."},"provider":{"type":"string","description":"Provider of the model","example":"Qwen"},"engine":{"type":"string","description":"Serving engine used by the template","example":"vllm"},"model_repository":{"type":"string","description":"Hugging Face repository the default variant loads","example":"Qwen/Qwen3.5-9B"},"parameters":{"type":"string","description":"Parameter count of the model (display string)","example":"9B"},"context_length":{"type":"integer","description":"Maximum context length in tokens","example":262144,"format":"int32"},"input_modalities":{"description":"Accepted input modalities","example":["text","image"],"type":"array","items":{"type":"string"}},"output_modalities":{"description":"Produced output modalities","example":["text"],"type":"array","items":{"type":"string"}},"tasks":{"description":"Coarse task labels","example":["text","multimodal"],"type":"array","items":{"type":"string"}},"requires_hugging_face_token":{"type":"boolean","description":"Whether a Hugging Face token is required to deploy the model (gated checkpoint)","example":false},"min_vram_gb":{"type":"integer","description":"Minimum total GPU memory in GB for the default variant","example":22,"format":"int32"},"recommended_compute":{"description":"Smallest compute configuration currently offered that fits the default variant. Null when nothing offered fits","nullable":true,"allOf":[{"$ref":"#/components/schemas/ComputeResource"}]},"revision":{"type":"object","description":"Pinned Hugging Face revision of the default repository. Null tracks the main branch","example":"c202236235762e1c871ad0ccb60c8ee5ba337b9a","nullable":true},"variants":{"description":"Selectable weight variants. The first one is the default","type":"array","items":{"$ref":"#/components/schemas/ContainerDeploymentTemplateVariantPublicApiDto"}},"features":{"description":"Independently selectable serving features","type":"array","items":{"$ref":"#/components/schemas/ContainerDeploymentTemplateFeaturePublicApiDto"}}},"required":["id","name","description","provider","engine","model_repository","parameters","context_length","input_modalities","output_modalities","tasks","requires_hugging_face_token","min_vram_gb","recommended_compute","revision","variants","features"]},"DeployContainerDeploymentTemplatePublicApiDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the deployment. Immutable after creation","example":"qwen3-5-9b"},"variant":{"type":"string","description":"Variant id from the template detail. Defaults to the first variant","example":"fp8"},"features":{"description":"Feature ids to enable. Defaults to the features marked is_default","example":["tool_calling","reasoning"],"type":"array","items":{"type":"string"}},"compute":{"description":"Compute to deploy on. Defaults to the smallest offered configuration that fits the variant","allOf":[{"$ref":"#/components/schemas/ComputeResource"}]},"hf_token_secret_name":{"type":"string","description":"Name of an existing secret (POST /secrets) holding a Hugging Face token. Required for gated models","example":"hf-token"},"shm_size_mb":{"type":"integer","description":"Size of the /dev/shm memory volume in MiB. Defaults to a size based on the GPU count (1 GPU: 1024, 2: 4096, 4: 8192, 8: 16384) or the template default","enum":[64,128,256,512,1024,2048,4096,8192,16384,32768],"example":8192,"format":"int32"},"scaling":{"description":"Scaling options. Omitted fields use the platform defaults","allOf":[{"$ref":"#/components/schemas/PatchScalingOptionsPublicApiDto"}]}},"required":["name"]},"SystemLogEntryPublicApiResponseDto":{"type":"object","properties":{"timestamp":{"type":"string","example":"2026-06-01T12:00:00.123456789Z","description":"Latest observed timestamp of the group, RFC3339 with nanosecond precision."},"reason":{"type":"string","example":"SchedulingFailed","description":"Display reason of the event."},"message":{"type":"string","example":"Replica is waiting for its storage volume to be provisioned","description":"Event message without an observation-count suffix."},"involved_object":{"type":"string","example":"my-deployment-6f9c8b7d5-x2abc","description":"Workload or child object the event concerns; not necessarily a replica."},"count":{"type":"integer","format":"int32","minimum":1,"example":3,"description":"Collected records grouped into this entry, not a Kubernetes occurrence count. May be partial at the raw scan cap."}},"required":["timestamp","reason","message","involved_object","count"]}},"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http","description":"[Generate the token here](#tag/authentication/POST/v1/oauth2/token). Bearer token to authenticate requests to the public API. You can generate a token by calling the `/v1/oauth2/token` endpoint."}}}}