Справочник API
Все эндпоинты v1: параметры, примеры запросов и ответов, ошибки и нужные права. Схема та же, что в /api/v1/openapi.json.
Аутентификация и ключи
Каждый запрос к закрытым эндпоинтам передаёт ключ в заголовке: Authorization: Bearer gpz_… Ключ — 44 символа: префикс gpz_ и 40 букв и цифр.
Ключ даёт доступ только к вашему аккаунту. Сессия из браузера через API не работает: это намеренно.
Права (scopes): user:read и user:write — профиль, SSH-ключи, API-ключи; instances:read и instances:write — серверы и свои шаблоны; billing:read — баланс и операции. Списать или пополнить через API нельзя: платежи — только в консоли.
Секрет показывается один раз при создании. Храните его в переменной окружения или менеджере секретов, а не в коде.
Ключ можно отозвать в консоли или через DELETE /api-keys/{id}. Ключ нельзя выдать с правами, которых нет у вашего ключа.
Authorization: Bearer gpz_…Переменная окружения: GPUNZ_API_KEY
Ошибки
Любая ошибка — HTTP-статус и одинаковое тело: {"error": {"code": "…", "message": "…", "details": {…}}}. Код — стабильный, по нему удобно ветвить логику. Текст сообщения зависит от заголовка Accept-Language (по умолчанию русский).
{
"error": {
"code": "insufficient_funds",
"message": "Insufficient funds: 120 RUB short. Top up your balance.",
"details": { "short_kop": 12000 }
}
}| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 404 | not_found | Ресурс не найден или принадлежит другому пользователю |
| 422 | validation_error | Неверные параметры. details.issues перечисляет поля |
| 402 | insufficient_funds | Не хватает денег на 2 часа работы. details.short_kop — сколько |
| 409 | conflict | Состояние не позволяет действие: цена изменилась, сервер уже удаляется, лимит |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 503 | provider_unavailable | Временная недоступность сервиса. Повторите позже |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
| 400 | authorization_pending | Вход (device flow): ждём подтверждения в браузере |
| 400 | slow_down | Вход (device flow): опрашиваете слишком часто |
| 400 | access_denied | Вход (device flow): отклонено в браузере |
| 400 | expired_token | Вход (device flow): код истёк или уже использован |
Повторяйте запросы с 5xx и 429 с экспоненциальной паузой. Для POST /instances повтор безопасен благодаря Idempotency-Key.
Лимиты
120 запросов в минуту на ключ и 60 в минуту на адрес без ключа. Заголовки X-RateLimit-Limit, X-RateLimit-Remaining и X-RateLimit-Reset показывают остаток. При 429 повторите после Retry-After.
Списки: ?limit= (по умолчанию 50, максимум 200). Следующая страница — по next_cursor. Смещений (offset) нет: курсор стабилен, даже когда цены меняются.
Деньги — целые копейки (поля *_kop), цены в час — копейки в час (*_kop_h), валюта RUB. Времена — UTC в формате RFC 3339.
Публичные GET (/gpus, /offers, /templates) отвечают с CORS и кешируются на 60 секунд, остальное — Cache-Control: no-store.
Курсор непрозрачный: не разбирайте его и не подставляйте самостоятельно.
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 117
X-RateLimit-Reset: 2
{ "data": [...], "next_cursor": "eyJ…" }Прерываемые серверы
Прерываемый сервер стоит дешевле обычного, но его могут остановить, если цена на ресурс вырастет выше вашей ставки. Статус outbid означает, что сервер прерван.
Фильтр type=interruptible в GET /offers показывает такие предложения, а GET /gpus отдаёт from_interruptible_kop_h. Поле price.interruptible_kop_h — цена всего сервера в копейках в час.
Прерываемый сервер (type: interruptible) создаётся тем же POST /instances. Когда рыночная цена поднимается выше вашей ставки, сервер переходит в статус outbid: GPU не тарифицируется, диск продолжает. Запуск снова делает новую ставку.
Аккаунт
Профиль, баланс и операции
/api/v1/meТекущий пользователь
Профиль владельца ключа.
Запрос
curl -X GET 'https://gpu.nz/api/v1/me' \
-H "Authorization: Bearer $GPUNZ_API_KEY"Ответ
{
"id": "u_01J9Z3K2Q7",
"email": "you@example.com",
"name": "Egor",
"created_at": "2026-09-01T10:00:00.000Z",
"two_factor": false,
"email_verified": true,
"telegram_linked": false
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
/api/v1/balanceБаланс и расход
Баланс, доступная сумма, расход в час и оценка, на сколько хватит денег при текущих серверах.
Запрос
curl -X GET 'https://gpu.nz/api/v1/balance' \
-H "Authorization: Bearer $GPUNZ_API_KEY"Ответ
{
"balance_kop": 250000,
"available_kop": 241250,
"credit_limit_kop": 0,
"burn_kop_h": 4120,
"runway_hours": 58.5,
"currency": "RUB"
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
/api/v1/transactionsОперации по счёту
Пополнения, списания за аренду и трафик, бонусы. Новые сверху.
Параметры
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| limitquery | integer | нет | Сколько строк вернуть (1–200, по умолчанию 50) |
| cursorquery | string | нет | Курсор из next_cursor предыдущей страницы |
Запрос
curl -X GET 'https://gpu.nz/api/v1/transactions' \
-H "Authorization: Bearer $GPUNZ_API_KEY"Ответ
{
"data": [
{
"id": "t_01J9Z4",
"at": "2026-10-10T11:00:00.000Z",
"type": "usage",
"amount_kop": -1850,
"description": "Instance rental",
"instance_id": "i_8f2KQ1xZ"
}
],
"next_cursor": null
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
| 422 | validation_error | Неверные параметры. details.issues перечисляет поля |
Каталог
GPU, предложения и шаблоны
/api/v1/gpusМодели видеокарт
Все модели с числом свободных GPU и минимальной ценой за одну карту. Открыто без ключа, CORS разрешён.
Запрос
curl -X GET 'https://gpu.nz/api/v1/gpus'Ответ
{
"data": [
{
"slug": "rtx-4090-24gb",
"name": "RTX 4090",
"vram_gb": 24,
"tier": "consumer",
"available_gpus": 42,
"from_kop_h": 2650,
"from_interruptible_kop_h": 1190
}
],
"next_cursor": null
}/api/v1/offersПоиск серверов
Доступные для аренды серверы с фильтрами и сортировкой. Цены — за весь сервер, в копейках в час. Открыто без ключа.
- В выдаче только сейчас доступные предложения. Для списка используйте next_cursor, а не смещение.
Параметры
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| gpuquery | string | нет | Slug моделей через запятую |
| num_gpusquery | string | нет | Число GPU в сервере: 1,2,4,8 (через запятую) |
| min_gpusquery | integer | нет | Минимум GPU в сервере |
| typequery | "on_demand" | "interruptible" | нет | on_demand (по умолчанию) или interruptible |
| countryquery | string | нет | Страны ISO-2 через запятую |
| min_reliabilityquery | number | нет | Надёжность от 0 до 1 |
| min_vram_gbquery | number | нет | Память на карту от, ГБ |
| max_price_kop_hquery | integer | нет | Не дороже, копеек в час (за весь сервер, по выбранному типу) |
| verifiedquery | boolean | нет | Только проверенные дата-центры |
| min_cudaquery | number | нет | Минимальная версия CUDA, например 12.4 |
| min_disk_gbquery | number | нет | Минимальный диск, ГБ |
| min_inet_down_mbpsquery | number | нет | Минимальная загрузка, Мбит/с |
| orderquery | "price" | "-price" | "dlperf" | "dlperf_per_price" | "reliability" | "vram" | "inet_down" | нет | price (по умолчанию), -price, dlperf, dlperf_per_price, reliability, vram, inet_down |
| limitquery | integer | нет | Сколько строк вернуть (1–200, по умолчанию 50) |
| cursorquery | string | нет | Курсор из next_cursor предыдущей страницы |
Запрос
curl -X GET 'https://gpu.nz/api/v1/offers?gpu=rtx-4090-24gb%2Crtx-3090-24gb&country=DE%2CNL&limit=5'Ответ
{
"data": [
{
"id": "o_4Jx9Q2",
"available": true,
"verified": true,
"country": "DE",
"region": "Hesse",
"gpu": {
"slug": "rtx-4090-24gb",
"name": "RTX 4090",
"count": 2,
"vram_gb": 24,
"total_tflops": 165.2,
"mem_bw_gbs": 1008
},
"cpu": {
"name": "AMD EPYC 7543",
"cores": 16
},
"ram_gb": 128,
"disk": {
"max_gb": 1500,
"bw_mbps": 2400,
"name": null
},
"network": {
"up_mbps": 900,
"down_mbps": 950,
"ports": 4
},
"pcie": {
"gen": 4,
"bw_gbs": 31.5
},
"cuda_max": 12.8,
"driver": "550.120",
"reliability": 0.9987,
"max_duration_days": 120,
"dlperf": 88.4,
"price": {
"on_demand_kop_h": 5280,
"interruptible_kop_h": 2380,
"storage_kop_gb_month": 900,
"traffic_kop_gb": 0
}
}
],
"next_cursor": null
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 422 | validation_error | Неверные параметры. details.issues перечисляет поля |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
/api/v1/offers/{id}Одно предложение
Полные характеристики и цены. Открыто без ключа.
Параметры
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| idpath | string | да | Id предложения |
Запрос
curl -X GET 'https://gpu.nz/api/v1o_4Jx9Q2'Ответ
{
"id": "o_4Jx9Q2",
"available": true,
"verified": true,
"country": "DE",
"region": "Hesse",
"gpu": {
"slug": "rtx-4090-24gb",
"name": "RTX 4090",
"count": 2,
"vram_gb": 24,
"total_tflops": 165.2,
"mem_bw_gbs": 1008
},
"cpu": {
"name": "AMD EPYC 7543",
"cores": 16
},
"ram_gb": 128,
"disk": {
"max_gb": 1500,
"bw_mbps": 2400,
"name": null
},
"network": {
"up_mbps": 900,
"down_mbps": 950,
"ports": 4
},
"pcie": {
"gen": 4,
"bw_gbs": 31.5
},
"cuda_max": 12.8,
"driver": "550.120",
"reliability": 0.9987,
"max_duration_days": 120,
"dlperf": 88.4,
"price": {
"on_demand_kop_h": 5280,
"interruptible_kop_h": 2380,
"storage_kop_gb_month": 900,
"traffic_kop_gb": 0
}
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 404 | not_found | Ресурс не найден или принадлежит другому пользователю |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
/api/v1/templatesШаблоны
Каталог шаблонов. Если передан ключ, в выдаче есть и ваши собственные шаблоны (owner = me).
Запрос
curl -X GET 'https://gpu.nz/api/v1/templates' \
-H "Authorization: Bearer $GPUNZ_API_KEY"Ответ
{
"data": [
{
"slug": "pytorch-cuda12",
"name": "PyTorch + CUDA 12",
"description": "PyTorch 2.5 with CUDA 12.4 and Jupyter",
"image": "pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime",
"launch_mode": "ssh",
"ports": [
8888
],
"env": {},
"onstart": null,
"min_disk_gb": 20,
"recommended_disk_gb": 40,
"public": true,
"owner": "gpunz"
}
],
"next_cursor": null
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
/api/v1/templatesСоздать свой шаблон
Свой образ Docker с портами и переменными. Виден только вам. Лимит — 20 шаблонов.
Тело запроса
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| name | string | да | Название |
| description | string | нет | Описание |
| image | string | да | Docker-образ с тегом |
| launch_mode | "ssh" | "jupyter" | "entrypoint" | нет | Режим запуска (по умолчанию ssh) |
| ports | array<integer> | нет | Порты, которые будут опубликованы |
| env | object | нет | Переменные окружения (до 30) |
| onstart | string | нет | Команда при старте |
| min_disk_gb | integer | нет | Минимум диска |
| recommended_disk_gb | integer | нет | Рекомендуемый диск |
Запрос
curl -X POST 'https://gpu.nz/api/v1/templates' \
-H "Authorization: Bearer $GPUNZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "My trainer",
"image": "ghcr.io/me/trainer:1.2",
"ports": [
7860
],
"min_disk_gb": 40
}'Ответ
{
"slug": "pytorch-cuda12",
"name": "PyTorch + CUDA 12",
"description": "PyTorch 2.5 with CUDA 12.4 and Jupyter",
"image": "pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime",
"launch_mode": "ssh",
"ports": [
8888
],
"env": {},
"onstart": null,
"min_disk_gb": 20,
"recommended_disk_gb": 40,
"public": true,
"owner": "gpunz"
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
| 422 | validation_error | Неверные параметры. details.issues перечисляет поля |
| 409 | conflict | Состояние не позволяет действие: цена изменилась, сервер уже удаляется, лимит |
/api/v1/templates/{slug}Удалить свой шаблон
Скрывает шаблон. Серверы, уже созданные из него, работают как прежде.
Параметры
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| slugpath | string | да | Slug шаблона |
Запрос
curl -X DELETE 'https://gpu.nz/api/v1pytorch-cuda12' \
-H "Authorization: Bearer $GPUNZ_API_KEY"Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
| 404 | not_found | Ресурс не найден или принадлежит другому пользователю |
SSH-ключи
Ключи для доступа к серверам
/api/v1/ssh-keysSSH-ключи
Ключи, которые добавляются на новые серверы.
Запрос
curl -X GET 'https://gpu.nz/api/v1/ssh-keys' \
-H "Authorization: Bearer $GPUNZ_API_KEY"Ответ
{
"data": [
{
"id": "k_9Qw1Zm",
"name": "laptop",
"type": "ssh-ed25519",
"fingerprint": "SHA256:5mkcWNm+GX3XK8EbRD+A6ieMSHyFHC0ysCe5CgbJRLM",
"created_at": "2026-09-01T10:00:00.000Z"
}
],
"next_cursor": null
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
/api/v1/ssh-keysДобавить SSH-ключ
Публичный ключ из файла .pub. Приватный ключ не отправляйте.
Тело запроса
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| name | string | нет | Название (необязательно) |
| public_key | string | да | Строка из файла .pub |
Запрос
curl -X POST 'https://gpu.nz/api/v1/ssh-keys' \
-H "Authorization: Bearer $GPUNZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "laptop",
"public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAc6078X+m8JF6aSSsBQjeBTnWzC726H37M3DAbeLVMg you@laptop"
}'Ответ
{
"id": "k_9Qw1Zm",
"name": "laptop",
"type": "ssh-ed25519",
"fingerprint": "SHA256:5mkcWNm+GX3XK8EbRD+A6ieMSHyFHC0ysCe5CgbJRLM",
"created_at": "2026-09-01T10:00:00.000Z"
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
| 422 | validation_error | Неверные параметры. details.issues перечисляет поля |
/api/v1/ssh-keys/{id}Удалить SSH-ключ
Новые серверы не получат ключ. Запущенные не меняются.
Параметры
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| idpath | string | да | Id SSH-ключа |
Запрос
curl -X DELETE 'https://gpu.nz/api/v1k_9Qw1Zm' \
-H "Authorization: Bearer $GPUNZ_API_KEY"Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
| 404 | not_found | Ресурс не найден или принадлежит другому пользователю |
Серверы
Аренда, управление и логи
/api/v1/instancesСерверы
Ваши серверы. По умолчанию — только живые (не удалённые).
Параметры
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| statusquery | "active" | "all" | нет | active (по умолчанию) или all |
| limitquery | integer | нет | Сколько строк вернуть (1–200, по умолчанию 50) |
| cursorquery | string | нет | Курсор из next_cursor предыдущей страницы |
Запрос
curl -X GET 'https://gpu.nz/api/v1/instances' \
-H "Authorization: Bearer $GPUNZ_API_KEY"Ответ
{
"data": [
{
"id": "i_8f2KQ1xZ",
"name": "trainer",
"status": "running",
"desired_state": "running",
"type": "on_demand",
"gpu": {
"slug": "rtx-4090-24gb",
"name": "RTX 4090",
"count": 1,
"vram_gb": 24
},
"template": {
"slug": "pytorch-cuda12",
"name": "PyTorch + CUDA 12"
},
"image": "pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime",
"disk_gb": 40,
"country": "DE",
"price": {
"running_kop_h": 2640,
"stopped_kop_h": 24,
"traffic_kop_gb": 0
},
"cost_so_far_kop": 1850,
"ssh": {
"host": "203.0.113.10",
"port": 40122,
"user": "root",
"command": "ssh -p 40122 root@203.0.113.10"
},
"urls": [
{
"label": "8888",
"url": "http://203.0.113.10:41001/"
}
],
"created_at": "2026-10-10T11:00:00.000Z",
"started_at": "2026-10-10T11:02:00.000Z",
"stop_reason": null
}
],
"next_cursor": null
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
| 422 | validation_error | Неверные параметры. details.issues перечисляет поля |
/api/v1/instancesАрендовать сервер
Берёт предложение, фиксирует цену и создаёт сервер. Нужен заголовок Idempotency-Key: повтор с тем же ключом не создаёт второй сервер и возвращает существующий (200).
Идемпотентен: повтор с тем же Idempotency-Key возвращает тот же объект
- 402 insufficient_funds: details.short_kop — сколько копеек не хватает на 2 часа работы.
- 403 forbidden с details.reason = email_not_verified: подтвердите e-mail в аккаунте.
- Прерываемый сервер: type: interruptible. При росте цены сервер переходит в outbid (GPU не тарифицируется), start делает новую ставку.
Параметры
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| Idempotency-Keyheader | string | да | Уникальный ключ запроса, до 64 символов |
Тело запроса
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| offer_id | string | да | Id предложения из GET /offers |
| template | string | да | Slug шаблона |
| disk_gb | integer | да | Диск, ГБ |
| name | string | нет | Название |
| ssh_key_ids | array<string> | нет | Ключи (по умолчанию все ваши) |
| type | "on_demand" | "interruptible" | нет | Тип (по умолчанию on_demand) |
| image | string | нет | Docker-образ, только для шаблона custom |
| env | object | нет | Пока не поддерживается: передайте пустой объект или не передавайте |
| onstart | string | нет | Пока не поддерживается: передайте null или не передавайте |
Запрос
curl -X POST 'https://gpu.nz/api/v1/instances' \
-H "Authorization: Bearer $GPUNZ_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"offer_id": "o_4Jx9Q2",
"template": "pytorch-cuda12",
"disk_gb": 40,
"name": "trainer"
}'Ответ
{
"id": "i_8f2KQ1xZ",
"name": "trainer",
"status": "running",
"desired_state": "running",
"type": "on_demand",
"gpu": {
"slug": "rtx-4090-24gb",
"name": "RTX 4090",
"count": 1,
"vram_gb": 24
},
"template": {
"slug": "pytorch-cuda12",
"name": "PyTorch + CUDA 12"
},
"image": "pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime",
"disk_gb": 40,
"country": "DE",
"price": {
"running_kop_h": 2640,
"stopped_kop_h": 24,
"traffic_kop_gb": 0
},
"cost_so_far_kop": 1850,
"ssh": {
"host": "203.0.113.10",
"port": 40122,
"user": "root",
"command": "ssh -p 40122 root@203.0.113.10"
},
"urls": [
{
"label": "8888",
"url": "http://203.0.113.10:41001/"
}
],
"created_at": "2026-10-10T11:00:00.000Z",
"started_at": "2026-10-10T11:02:00.000Z",
"stop_reason": null
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 404 | not_found | Ресурс не найден или принадлежит другому пользователю |
| 422 | validation_error | Неверные параметры. details.issues перечисляет поля |
| 402 | insufficient_funds | Не хватает денег на 2 часа работы. details.short_kop — сколько |
| 409 | conflict | Состояние не позволяет действие: цена изменилась, сервер уже удаляется, лимит |
| 503 | provider_unavailable | Временная недоступность сервиса. Повторите позже |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
/api/v1/instances/{id}Сервер
Состояние, подключение и стоимость сервера.
Параметры
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| idpath | string | да | Id сервера |
Запрос
curl -X GET 'https://gpu.nz/api/v1i_8f2KQ1xZ' \
-H "Authorization: Bearer $GPUNZ_API_KEY"Ответ
{
"id": "i_8f2KQ1xZ",
"name": "trainer",
"status": "running",
"desired_state": "running",
"type": "on_demand",
"gpu": {
"slug": "rtx-4090-24gb",
"name": "RTX 4090",
"count": 1,
"vram_gb": 24
},
"template": {
"slug": "pytorch-cuda12",
"name": "PyTorch + CUDA 12"
},
"image": "pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime",
"disk_gb": 40,
"country": "DE",
"price": {
"running_kop_h": 2640,
"stopped_kop_h": 24,
"traffic_kop_gb": 0
},
"cost_so_far_kop": 1850,
"ssh": {
"host": "203.0.113.10",
"port": 40122,
"user": "root",
"command": "ssh -p 40122 root@203.0.113.10"
},
"urls": [
{
"label": "8888",
"url": "http://203.0.113.10:41001/"
}
],
"created_at": "2026-10-10T11:00:00.000Z",
"started_at": "2026-10-10T11:02:00.000Z",
"stop_reason": null
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
| 404 | not_found | Ресурс не найден или принадлежит другому пользователю |
/api/v1/instances/{id}Переименовать сервер
Меняет только название.
Параметры
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| idpath | string | да | Id сервера |
Тело запроса
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| name | stringnull | да | Новое название (null — убрать) |
Запрос
curl -X PATCH 'https://gpu.nz/api/v1i_8f2KQ1xZ' \
-H "Authorization: Bearer $GPUNZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "trainer-2"
}'Ответ
{
"id": "i_8f2KQ1xZ",
"name": "trainer",
"status": "running",
"desired_state": "running",
"type": "on_demand",
"gpu": {
"slug": "rtx-4090-24gb",
"name": "RTX 4090",
"count": 1,
"vram_gb": 24
},
"template": {
"slug": "pytorch-cuda12",
"name": "PyTorch + CUDA 12"
},
"image": "pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime",
"disk_gb": 40,
"country": "DE",
"price": {
"running_kop_h": 2640,
"stopped_kop_h": 24,
"traffic_kop_gb": 0
},
"cost_so_far_kop": 1850,
"ssh": {
"host": "203.0.113.10",
"port": 40122,
"user": "root",
"command": "ssh -p 40122 root@203.0.113.10"
},
"urls": [
{
"label": "8888",
"url": "http://203.0.113.10:41001/"
}
],
"created_at": "2026-10-10T11:00:00.000Z",
"started_at": "2026-10-10T11:02:00.000Z",
"stop_reason": null
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
| 422 | validation_error | Неверные параметры. details.issues перечисляет поля |
| 404 | not_found | Ресурс не найден или принадлежит другому пользователю |
/api/v1/instances/{id}/startЗапустить
Запускает остановленный сервер. Нужен баланс на 2 часа работы.
Параметры
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| idpath | string | да | Id сервера |
Запрос
curl -X POST 'https://gpu.nz/api/v1i_8f2KQ1xZ' \
-H "Authorization: Bearer $GPUNZ_API_KEY"Ответ
{
"id": "i_8f2KQ1xZ",
"name": "trainer",
"status": "running",
"desired_state": "running",
"type": "on_demand",
"gpu": {
"slug": "rtx-4090-24gb",
"name": "RTX 4090",
"count": 1,
"vram_gb": 24
},
"template": {
"slug": "pytorch-cuda12",
"name": "PyTorch + CUDA 12"
},
"image": "pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime",
"disk_gb": 40,
"country": "DE",
"price": {
"running_kop_h": 2640,
"stopped_kop_h": 24,
"traffic_kop_gb": 0
},
"cost_so_far_kop": 1850,
"ssh": {
"host": "203.0.113.10",
"port": 40122,
"user": "root",
"command": "ssh -p 40122 root@203.0.113.10"
},
"urls": [
{
"label": "8888",
"url": "http://203.0.113.10:41001/"
}
],
"created_at": "2026-10-10T11:00:00.000Z",
"started_at": "2026-10-10T11:02:00.000Z",
"stop_reason": null
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
| 402 | insufficient_funds | Не хватает денег на 2 часа работы. details.short_kop — сколько |
| 404 | not_found | Ресурс не найден или принадлежит другому пользователю |
| 409 | conflict | Состояние не позволяет действие: цена изменилась, сервер уже удаляется, лимит |
/api/v1/instances/{id}/stopОстановить
Останавливает сервер. Оплачивается только диск.
Параметры
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| idpath | string | да | Id сервера |
Запрос
curl -X POST 'https://gpu.nz/api/v1i_8f2KQ1xZ' \
-H "Authorization: Bearer $GPUNZ_API_KEY"Ответ
{
"id": "i_8f2KQ1xZ",
"name": "trainer",
"status": "running",
"desired_state": "running",
"type": "on_demand",
"gpu": {
"slug": "rtx-4090-24gb",
"name": "RTX 4090",
"count": 1,
"vram_gb": 24
},
"template": {
"slug": "pytorch-cuda12",
"name": "PyTorch + CUDA 12"
},
"image": "pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime",
"disk_gb": 40,
"country": "DE",
"price": {
"running_kop_h": 2640,
"stopped_kop_h": 24,
"traffic_kop_gb": 0
},
"cost_so_far_kop": 1850,
"ssh": {
"host": "203.0.113.10",
"port": 40122,
"user": "root",
"command": "ssh -p 40122 root@203.0.113.10"
},
"urls": [
{
"label": "8888",
"url": "http://203.0.113.10:41001/"
}
],
"created_at": "2026-10-10T11:00:00.000Z",
"started_at": "2026-10-10T11:02:00.000Z",
"stop_reason": null
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
| 404 | not_found | Ресурс не найден или принадлежит другому пользователю |
| 409 | conflict | Состояние не позволяет действие: цена изменилась, сервер уже удаляется, лимит |
/api/v1/instances/{id}Удалить сервер
Удаление необратимо: диск и данные пропадают. Статус станет destroying, затем destroyed.
Параметры
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| idpath | string | да | Id сервера |
Запрос
curl -X DELETE 'https://gpu.nz/api/v1i_8f2KQ1xZ' \
-H "Authorization: Bearer $GPUNZ_API_KEY"Ответ
{
"id": "i_8f2KQ1xZ",
"name": "trainer",
"status": "running",
"desired_state": "running",
"type": "on_demand",
"gpu": {
"slug": "rtx-4090-24gb",
"name": "RTX 4090",
"count": 1,
"vram_gb": 24
},
"template": {
"slug": "pytorch-cuda12",
"name": "PyTorch + CUDA 12"
},
"image": "pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime",
"disk_gb": 40,
"country": "DE",
"price": {
"running_kop_h": 2640,
"stopped_kop_h": 24,
"traffic_kop_gb": 0
},
"cost_so_far_kop": 1850,
"ssh": {
"host": "203.0.113.10",
"port": 40122,
"user": "root",
"command": "ssh -p 40122 root@203.0.113.10"
},
"urls": [
{
"label": "8888",
"url": "http://203.0.113.10:41001/"
}
],
"created_at": "2026-10-10T11:00:00.000Z",
"started_at": "2026-10-10T11:02:00.000Z",
"stop_reason": null
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
| 404 | not_found | Ресурс не найден или принадлежит другому пользователю |
| 409 | conflict | Состояние не позволяет действие: цена изменилась, сервер уже удаляется, лимит |
/api/v1/instances/{id}/logsЛоги
Последние строки журнала запуска.
Параметры
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| idpath | string | да | Id сервера |
| tailquery | integer | нет | Сколько строк (1–1000, по умолчанию 200) |
Запрос
curl -X GET 'https://gpu.nz/api/v1i_8f2KQ1xZ' \
-H "Authorization: Bearer $GPUNZ_API_KEY"Ответ
{
"lines": [
"Starting container…",
"Ready."
]
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
| 404 | not_found | Ресурс не найден или принадлежит другому пользователю |
| 503 | provider_unavailable | Временная недоступность сервиса. Повторите позже |
API-ключи
Выдача и отзыв ключей
/api/v1/api-keysAPI-ключи
Ваши активные ключи (без секретов).
Запрос
curl -X GET 'https://gpu.nz/api/v1/api-keys' \
-H "Authorization: Bearer $GPUNZ_API_KEY"Ответ
{
"data": [
{
"id": "ak_3hT8Lw",
"name": "CI",
"prefix": "gpz_3fA9",
"scopes": [
"instances:read",
"instances:write"
],
"source": "console",
"last_used_at": "2026-10-10T11:30:00.000Z",
"created_at": "2026-10-01T09:00:00.000Z",
"expires_at": null
}
],
"next_cursor": null
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
/api/v1/api-keysСоздать ключ
Секрет показывается только в ответе. Нельзя выдать права, которых нет у вашего ключа.
Тело запроса
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| name | string | да | Название |
| scopes | array<"user:read" | "user:write" | "instances:read" | "instances:write" | "billing:read"> | да | Права. Нельзя выдать больше, чем есть у ключа |
| expires_in_days | integernull | нет | Срок в днях (null — бессрочно) |
Запрос
curl -X POST 'https://gpu.nz/api/v1/api-keys' \
-H "Authorization: Bearer $GPUNZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "CI",
"scopes": [
"instances:read",
"instances:write"
],
"expires_in_days": 90
}'Ответ
{
"id": "ak_3hT8Lw",
"secret": "gpz_3fA9xK2mQp7vL0dR8sT4yW1bN6hJ5cE9fG2aZ8kP",
"name": "CI",
"prefix": "gpz_3fA9",
"scopes": [
"instances:read",
"instances:write"
],
"source": "api",
"last_used_at": null,
"created_at": "2026-10-10T09:00:00.000Z",
"expires_at": "2027-01-08T09:00:00.000Z"
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
| 422 | validation_error | Неверные параметры. details.issues перечисляет поля |
| 409 | conflict | Состояние не позволяет действие: цена изменилась, сервер уже удаляется, лимит |
/api/v1/api-keys/{id}Отозвать ключ
Ключ перестанет работать сразу. Можно отозвать и текущий ключ.
Параметры
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| idpath | string | да | Id ключа |
Запрос
curl -X DELETE 'https://gpu.nz/api/v1ak_3hT8Lw' \
-H "Authorization: Bearer $GPUNZ_API_KEY"Ошибки
| Статус | Код | Значение |
|---|---|---|
| 401 | unauthorized | Нет ключа, ключ неверный, отозван или истёк |
| 403 | forbidden | У ключа нет нужного права или аккаунт заблокирован |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
| 404 | not_found | Ресурс не найден или принадлежит другому пользователю |
Вход из терминала
Device flow для gpunz login
/api/v1/auth/deviceВход из терминала: начать
Выдаёт device_code для CLI и короткий user_code для браузера. Код живёт 10 минут. Используется gpunz login.
Запрос
curl -X POST 'https://gpu.nz/api/v1/auth/device' \
-H "Content-Type: application/json" \
-d '{
"client_name": "laptop"
}'Ответ
{
"device_code": "b1JQ3m7kZxR9aY2pD5sU8wE0tG4hK6nL1cV3fB7oM2i",
"user_code": "KQZD-7WXM",
"verification_uri": "https://gpu.nz/console/cli/auth",
"verification_uri_complete": "https://gpu.nz/console/cli/auth?code=KQZD-7WXM",
"expires_in": 600,
"interval": 3
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 422 | validation_error | Неверные параметры. details.issues перечисляет поля |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
/api/v1/auth/device/tokenВход из терминала: получить ключ
CLI опрашивает эндпоинт раз в interval секунд, пока пользователь не подтвердит код в браузере. Ключ выдаётся один раз.
- Пока ждём подтверждения — 400 authorization_pending. Слишком частые запросы — 400 slow_down (увеличьте интервал).
Тело запроса
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| device_code | string | да | device_code из POST /auth/device |
Запрос
curl -X POST 'https://gpu.nz/api/v1/auth/device/token' \
-H "Content-Type: application/json" \
-d '{
"device_code": "b1JQ3m7kZxR9aY2pD5sU8wE0tG4hK6nL1cV3fB7oM2i"
}'Ответ
{
"api_key": "gpz_9Kc2Lw8pQx4Rz1Tn6Vb3Mh7Jd0Fs5Ya2Ge8Xu1Pq",
"key_id": "ak_5qP2Vm",
"user": {
"email": "you@example.com"
}
}Ошибки
| Статус | Код | Значение |
|---|---|---|
| 400 | authorization_pending | Вход (device flow): ждём подтверждения в браузере |
| 400 | slow_down | Вход (device flow): опрашиваете слишком часто |
| 400 | access_denied | Вход (device flow): отклонено в браузере |
| 400 | expired_token | Вход (device flow): код истёк или уже использован |
| 422 | validation_error | Неверные параметры. details.issues перечисляет поля |
| 429 | rate_limited | Слишком много запросов. Заголовок Retry-After скажет, когда повторить |
| 500 | internal | Внутренняя ошибка. Повторите позже, request id поможет поддержке |
Объекты
Поля, которые могут быть null, отмечены.
User
Профиль владельца ключа
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| id | string | да | Внутренний id пользователя |
| stringnull | нет | E-mail (null, если не подтверждён) | |
| name | string | да | Имя |
| created_at | string | да | Дата регистрации |
| two_factor | boolean | нет | Включена двухфакторная защита |
| email_verified | boolean | нет | E-mail подтверждён |
| telegram_linked | boolean | нет | Привязан Telegram |
Balance
Баланс в копейках. Расход в копейках в час
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| balance_kop | integer | нет | Баланс: наличные + бонусы (копейки) |
| available_kop | integer | нет | Доступно сейчас, с учётом начисленного, но ещё не списанного |
| credit_limit_kop | integer | нет | Кредитный лимит |
| burn_kop_h | integer | нет | Расход всех серверов, копеек в час |
| runway_hours | numbernull | нет | Часов хватит при текущем расходе (null, если расхода нет) |
| currency | "RUB" | нет | Валюта |
Transaction
Строка журнала операций кошелька
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| id | string | нет | Id операции |
| at | string | нет | Время операции |
| type | "topup" | "usage" | "bandwidth" | "refund" | "promo_grant" | "promo_expire" | "adjustment" | "writeoff" | "reversal" | нет | Тип операции |
| amount_kop | integer | нет | Изменение баланса: плюс — зачисление, минус — списание |
| description | string | нет | Понятное описание |
| instance_id | stringnull | нет | Сервер, если операция к нему относится |
GpuModel
Модель видеокарты с текущим предложением
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| slug | string | нет | Идентификатор модели для фильтра gpu= |
| name | string | нет | Название |
| vram_gb | integer | нет | Память на одну карту, ГБ |
| tier | "consumer" | "workstation" | "datacenter" | "legacy" | нет | Класс |
| available_gpus | integer | нет | Свободных GPU сейчас |
| from_kop_h | integernull | нет | Минимум за одну GPU, копеек в час (на аренду) |
| from_interruptible_kop_h | integernull | нет | Минимум за одну GPU для прерываемых серверов |
Offer
Предложение: конфигурация сервера с ценой
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| id | string | да | Id предложения (для POST /instances) |
| available | boolean | да | Можно арендовать сейчас |
| verified | boolean | нет | Проверенный дата-центр |
| country | stringnull | нет | Страна, ISO-2 |
| region | stringnull | нет | Регион |
| gpu | object | да | GPU |
| cpu | object | нет | Процессор |
| ram_gb | integernull | нет | Оперативная память, ГБ |
| disk | object | нет | Диск |
| network | object | нет | Сеть |
| pcie | object | нет | PCIe |
| cuda_max | numbernull | нет | Максимальная версия CUDA |
| driver | stringnull | нет | Версия драйвера |
| reliability | numbernull | нет | Надёжность, 0–1 |
| max_duration_days | integernull | нет | Сколько дней ещё доступен контракт |
| dlperf | numbernull | нет | Индекс производительности для ML |
| price | object | да | Цены за весь сервер (все GPU), копейки |
Template
Шаблон: образ и режим запуска
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| slug | string | нет | Идентификатор (для template=) |
| name | string | нет | Название |
| description | string | нет | Описание |
| image | string | нет | Docker-образ |
| launch_mode | "ssh" | "jupyter" | "entrypoint" | нет | Режим запуска |
| ports | array<integer> | нет | Порты контейнера |
| env | object | нет | Переменные окружения |
| onstart | stringnull | нет | Команда при старте |
| min_disk_gb | integer | нет | Минимум диска, ГБ |
| recommended_disk_gb | integer | нет | Рекомендуемый диск, ГБ |
| public | boolean | нет | Виден всем |
| owner | "gpunz" | "me" | нет | gpunz — каталог, me — ваш шаблон |
TemplateCreate
Свой шаблон
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| name | string | да | Название |
| description | string | нет | Описание |
| image | string | да | Docker-образ с тегом |
| launch_mode | "ssh" | "jupyter" | "entrypoint" | нет | Режим запуска (по умолчанию ssh) |
| ports | array<integer> | нет | Порты, которые будут опубликованы |
| env | object | нет | Переменные окружения (до 30) |
| onstart | string | нет | Команда при старте |
| min_disk_gb | integer | нет | Минимум диска |
| recommended_disk_gb | integer | нет | Рекомендуемый диск |
SshKey
Публичный SSH-ключ
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| id | string | нет | Id ключа |
| name | string | нет | Название |
| type | string | нет | Тип ключа |
| fingerprint | string | нет | Отпечаток SHA256 |
| created_at | string | нет | Добавлен |
SshKeyCreate
Новый SSH-ключ
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| name | string | нет | Название (необязательно) |
| public_key | string | да | Строка из файла .pub |
Instance
Сервер (аренда)
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| id | string | да | Id сервера |
| name | stringnull | нет | Название |
| status | "creating" | "starting" | "running" | "stopping" | "stopped" | "destroying" | "destroyed" | "failed" | "outbid" | да | Текущее состояние |
| desired_state | "running" | "stopped" | "destroyed" | нет | К чему стремимся |
| type | "on_demand" | "interruptible" | да | Тип аренды |
| gpu | object | да | GPU |
| template | object | нет | Шаблон |
| image | string | нет | Docker-образ |
| disk_gb | integer | нет | Диск, ГБ |
| country | stringnull | нет | Страна, ISO-2 |
| price | object | да | Цены, копейки в час |
| cost_so_far_kop | integer | нет | Начислено за всё время, копейки |
| ssh | objectnull | нет | Подключение по SSH (null, пока порт не назначен) |
| urls | array<object> | нет | Веб-интерфейсы шаблона |
| created_at | string | нет | Создан |
| started_at | stringnull | нет | Первый запуск |
| stop_reason | stringnull | нет | Причина остановки: user, low_balance, admin, provider |
InstanceCreate
Параметры нового сервера
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| offer_id | string | да | Id предложения из GET /offers |
| template | string | да | Slug шаблона |
| disk_gb | integer | да | Диск, ГБ |
| name | string | нет | Название |
| ssh_key_ids | array<string> | нет | Ключи (по умолчанию все ваши) |
| type | "on_demand" | "interruptible" | нет | Тип (по умолчанию on_demand) |
| image | string | нет | Docker-образ, только для шаблона custom |
| env | object | нет | Пока не поддерживается: передайте пустой объект или не передавайте |
| onstart | string | нет | Пока не поддерживается: передайте null или не передавайте |
InstancePatch
Изменение сервера
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| name | stringnull | да | Новое название (null — убрать) |
InstanceLogs
Последние строки журнала сервера
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| lines | array<string> | нет | Строки |
ApiKey
API-ключ (без секрета)
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| id | string | нет | Id ключа |
| name | string | нет | Название |
| prefix | string | нет | Начало ключа для узнавания |
| scopes | array<"user:read" | "user:write" | "instances:read" | "instances:write" | "billing:read"> | нет | Права |
| source | "console" | "cli" | "api" | нет | Откуда выдан |
| last_used_at | stringnull | нет | Последнее использование |
| created_at | string | нет | Создан |
| expires_at | stringnull | нет | Истекает (null — не истекает) |
ApiKeyCreate
Новый ключ
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| name | string | да | Название |
| scopes | array<"user:read" | "user:write" | "instances:read" | "instances:write" | "billing:read"> | да | Права. Нельзя выдать больше, чем есть у ключа |
| expires_in_days | integernull | нет | Срок в днях (null — бессрочно) |
ApiKeyCreated
Новый ключ с секретом. Секрет показывается один раз
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| id | string | нет | Id ключа |
| secret | string | нет | Секрет gpz_… (сохраните сейчас) |
| name | string | нет | Название |
| prefix | string | нет | Начало ключа |
| scopes | array<string> | нет | Права |
| source | string | нет | Откуда выдан |
| last_used_at | stringnull | нет | Последнее использование |
| created_at | string | нет | Создан |
| expires_at | stringnull | нет | Истекает |
DeviceCode
Код для входа из терминала (gpunz login)
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| device_code | string | нет | Секрет для CLI, не показывать |
| user_code | string | нет | Код, который вводят в браузере |
| verification_uri | string | нет | Страница подтверждения |
| verification_uri_complete | string | нет | Страница с заполненным кодом |
| expires_in | integer | нет | Срок жизни, секунд |
| interval | integer | нет | Минимальный интервал опроса, секунд |
DeviceTokenRequest
Запрос токена по device_code
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| device_code | string | да | device_code из POST /auth/device |
DeviceToken
Выданный ключ (один раз)
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| api_key | string | нет | Секрет gpz_… |
| key_id | string | нет | Id ключа |
| user | object | нет | Владелец |