Доступность GPU обновляется каждую минуту
gpu.nz

Справочник API

Все эндпоинты v1: параметры, примеры запросов и ответов, ошибки и нужные права. Схема та же, что в /api/v1/openapi.json.

https://gpu.nz/api/v1JSON · UTF-8 · snake_case

Аутентификация и ключи

Каждый запрос к закрытым эндпоинтам передаёт ключ в заголовке: 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 }
  }
}
СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
404not_foundРесурс не найден или принадлежит другому пользователю
422validation_errorНеверные параметры. details.issues перечисляет поля
402insufficient_fundsНе хватает денег на 2 часа работы. details.short_kop — сколько
409conflictСостояние не позволяет действие: цена изменилась, сервер уже удаляется, лимит
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
503provider_unavailableВременная недоступность сервиса. Повторите позже
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
400authorization_pendingВход (device flow): ждём подтверждения в браузере
400slow_downВход (device flow): опрашиваете слишком часто
400access_deniedВход (device flow): отклонено в браузере
400expired_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 не тарифицируется, диск продолжает. Запуск снова делает новую ставку.

Аккаунт

Профиль, баланс и операции

GET/api/v1/me

Текущий пользователь

Профиль владельца ключа.

API-ключПраво: user:read

Запрос

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
}

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
GET/api/v1/balance

Баланс и расход

Баланс, доступная сумма, расход в час и оценка, на сколько хватит денег при текущих серверах.

API-ключПраво: billing:read

Запрос

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"
}

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
GET/api/v1/transactions

Операции по счёту

Пополнения, списания за аренду и трафик, бонусы. Новые сверху.

API-ключПраво: billing:read

Параметры

ИмяТипОбязательноОписание
limitqueryintegerнетСколько строк вернуть (1–200, по умолчанию 50)
cursorquerystringнетКурсор из 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
}

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
422validation_errorНеверные параметры. details.issues перечисляет поля

Каталог

GPU, предложения и шаблоны

GET/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
}
GET/api/v1/offers

Поиск серверов

Доступные для аренды серверы с фильтрами и сортировкой. Цены — за весь сервер, в копейках в час. Открыто без ключа.

Открыт без ключа
  • В выдаче только сейчас доступные предложения. Для списка используйте next_cursor, а не смещение.

Параметры

ИмяТипОбязательноОписание
gpuquerystringнетSlug моделей через запятую
num_gpusquerystringнетЧисло GPU в сервере: 1,2,4,8 (через запятую)
min_gpusqueryintegerнетМинимум GPU в сервере
typequery"on_demand" | "interruptible"нетon_demand (по умолчанию) или interruptible
countryquerystringнетСтраны ISO-2 через запятую
min_reliabilityquerynumberнетНадёжность от 0 до 1
min_vram_gbquerynumberнетПамять на карту от, ГБ
max_price_kop_hqueryintegerнетНе дороже, копеек в час (за весь сервер, по выбранному типу)
verifiedquerybooleanнетТолько проверенные дата-центры
min_cudaquerynumberнетМинимальная версия CUDA, например 12.4
min_disk_gbquerynumberнетМинимальный диск, ГБ
min_inet_down_mbpsquerynumberнетМинимальная загрузка, Мбит/с
orderquery"price" | "-price" | "dlperf" | "dlperf_per_price" | "reliability" | "vram" | "inet_down"нетprice (по умолчанию), -price, dlperf, dlperf_per_price, reliability, vram, inet_down
limitqueryintegerнетСколько строк вернуть (1–200, по умолчанию 50)
cursorquerystringнетКурсор из 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
}

Ошибки

СтатусКодЗначение
422validation_errorНеверные параметры. details.issues перечисляет поля
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
GET/api/v1/offers/{id}

Одно предложение

Полные характеристики и цены. Открыто без ключа.

Открыт без ключа

Параметры

ИмяТипОбязательноОписание
idpathstringда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
  }
}

Ошибки

СтатусКодЗначение
404not_foundРесурс не найден или принадлежит другому пользователю
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
GET/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
}

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
POST/api/v1/templates

Создать свой шаблон

Свой образ Docker с портами и переменными. Виден только вам. Лимит — 20 шаблонов.

API-ключПраво: instances:write

Тело запроса

ИмяТипОбязательноОписание
namestringдаНазвание
descriptionstringнетОписание
imagestringдаDocker-образ с тегом
launch_mode"ssh" | "jupyter" | "entrypoint"нетРежим запуска (по умолчанию ssh)
portsarray<integer>нетПорты, которые будут опубликованы
envobjectнетПеременные окружения (до 30)
onstartstringнетКоманда при старте
min_disk_gbintegerнетМинимум диска
recommended_disk_gbintegerнетРекомендуемый диск

Запрос

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"
}

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
422validation_errorНеверные параметры. details.issues перечисляет поля
409conflictСостояние не позволяет действие: цена изменилась, сервер уже удаляется, лимит
DELETE/api/v1/templates/{slug}

Удалить свой шаблон

Скрывает шаблон. Серверы, уже созданные из него, работают как прежде.

API-ключПраво: instances:write

Параметры

ИмяТипОбязательноОписание
slugpathstringдаSlug шаблона

Запрос

curl -X DELETE 'https://gpu.nz/api/v1pytorch-cuda12' \
  -H "Authorization: Bearer $GPUNZ_API_KEY"

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
404not_foundРесурс не найден или принадлежит другому пользователю

SSH-ключи

Ключи для доступа к серверам

GET/api/v1/ssh-keys

SSH-ключи

Ключи, которые добавляются на новые серверы.

API-ключПраво: user:read

Запрос

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
}

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
POST/api/v1/ssh-keys

Добавить SSH-ключ

Публичный ключ из файла .pub. Приватный ключ не отправляйте.

API-ключПраво: user:write

Тело запроса

ИмяТипОбязательноОписание
namestringнетНазвание (необязательно)
public_keystringдаСтрока из файла .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"
}

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
422validation_errorНеверные параметры. details.issues перечисляет поля
DELETE/api/v1/ssh-keys/{id}

Удалить SSH-ключ

Новые серверы не получат ключ. Запущенные не меняются.

API-ключПраво: user:write

Параметры

ИмяТипОбязательноОписание
idpathstringдаId SSH-ключа

Запрос

curl -X DELETE 'https://gpu.nz/api/v1k_9Qw1Zm' \
  -H "Authorization: Bearer $GPUNZ_API_KEY"

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
404not_foundРесурс не найден или принадлежит другому пользователю

Серверы

Аренда, управление и логи

GET/api/v1/instances

Серверы

Ваши серверы. По умолчанию — только живые (не удалённые).

API-ключПраво: instances:read

Параметры

ИмяТипОбязательноОписание
statusquery"active" | "all"нетactive (по умолчанию) или all
limitqueryintegerнетСколько строк вернуть (1–200, по умолчанию 50)
cursorquerystringнетКурсор из 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
}

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
422validation_errorНеверные параметры. details.issues перечисляет поля
POST/api/v1/instances

Арендовать сервер

Берёт предложение, фиксирует цену и создаёт сервер. Нужен заголовок Idempotency-Key: повтор с тем же ключом не создаёт второй сервер и возвращает существующий (200).

API-ключПраво: instances:write

Идемпотентен: повтор с тем же Idempotency-Key возвращает тот же объект

  • 402 insufficient_funds: details.short_kop — сколько копеек не хватает на 2 часа работы.
  • 403 forbidden с details.reason = email_not_verified: подтвердите e-mail в аккаунте.
  • Прерываемый сервер: type: interruptible. При росте цены сервер переходит в outbid (GPU не тарифицируется), start делает новую ставку.

Параметры

ИмяТипОбязательноОписание
Idempotency-KeyheaderstringдаУникальный ключ запроса, до 64 символов

Тело запроса

ИмяТипОбязательноОписание
offer_idstringдаId предложения из GET /offers
templatestringдаSlug шаблона
disk_gbintegerдаДиск, ГБ
namestringнетНазвание
ssh_key_idsarray<string>нетКлючи (по умолчанию все ваши)
type"on_demand" | "interruptible"нетТип (по умолчанию on_demand)
imagestringнетDocker-образ, только для шаблона custom
envobjectнетПока не поддерживается: передайте пустой объект или не передавайте
onstartstringнетПока не поддерживается: передайте 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
}

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
404not_foundРесурс не найден или принадлежит другому пользователю
422validation_errorНеверные параметры. details.issues перечисляет поля
402insufficient_fundsНе хватает денег на 2 часа работы. details.short_kop — сколько
409conflictСостояние не позволяет действие: цена изменилась, сервер уже удаляется, лимит
503provider_unavailableВременная недоступность сервиса. Повторите позже
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
GET/api/v1/instances/{id}

Сервер

Состояние, подключение и стоимость сервера.

API-ключПраво: instances:read

Параметры

ИмяТипОбязательноОписание
idpathstringда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
}

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
404not_foundРесурс не найден или принадлежит другому пользователю
PATCH/api/v1/instances/{id}

Переименовать сервер

Меняет только название.

API-ключПраво: instances:write

Параметры

ИмяТипОбязательноОписание
idpathstringдаId сервера

Тело запроса

ИмяТипОбязательноОписание
namestringnullдаНовое название (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
}

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
422validation_errorНеверные параметры. details.issues перечисляет поля
404not_foundРесурс не найден или принадлежит другому пользователю
POST/api/v1/instances/{id}/start

Запустить

Запускает остановленный сервер. Нужен баланс на 2 часа работы.

API-ключПраво: instances:write

Параметры

ИмяТипОбязательноОписание
idpathstringда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
}

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
402insufficient_fundsНе хватает денег на 2 часа работы. details.short_kop — сколько
404not_foundРесурс не найден или принадлежит другому пользователю
409conflictСостояние не позволяет действие: цена изменилась, сервер уже удаляется, лимит
POST/api/v1/instances/{id}/stop

Остановить

Останавливает сервер. Оплачивается только диск.

API-ключПраво: instances:write

Параметры

ИмяТипОбязательноОписание
idpathstringда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
}

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
404not_foundРесурс не найден или принадлежит другому пользователю
409conflictСостояние не позволяет действие: цена изменилась, сервер уже удаляется, лимит
DELETE/api/v1/instances/{id}

Удалить сервер

Удаление необратимо: диск и данные пропадают. Статус станет destroying, затем destroyed.

API-ключПраво: instances:write

Параметры

ИмяТипОбязательноОписание
idpathstringда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
}

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
404not_foundРесурс не найден или принадлежит другому пользователю
409conflictСостояние не позволяет действие: цена изменилась, сервер уже удаляется, лимит
GET/api/v1/instances/{id}/logs

Логи

Последние строки журнала запуска.

API-ключПраво: instances:read

Параметры

ИмяТипОбязательноОписание
idpathstringдаId сервера
tailqueryintegerнетСколько строк (1–1000, по умолчанию 200)

Запрос

curl -X GET 'https://gpu.nz/api/v1i_8f2KQ1xZ' \
  -H "Authorization: Bearer $GPUNZ_API_KEY"

Ответ

{
  "lines": [
    "Starting container…",
    "Ready."
  ]
}

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
404not_foundРесурс не найден или принадлежит другому пользователю
503provider_unavailableВременная недоступность сервиса. Повторите позже

API-ключи

Выдача и отзыв ключей

GET/api/v1/api-keys

API-ключи

Ваши активные ключи (без секретов).

API-ключПраво: user:read

Запрос

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
}

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
POST/api/v1/api-keys

Создать ключ

Секрет показывается только в ответе. Нельзя выдать права, которых нет у вашего ключа.

API-ключПраво: user:write

Тело запроса

ИмяТипОбязательноОписание
namestringдаНазвание
scopesarray<"user:read" | "user:write" | "instances:read" | "instances:write" | "billing:read">даПрава. Нельзя выдать больше, чем есть у ключа
expires_in_daysintegernullнетСрок в днях (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"
}

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
422validation_errorНеверные параметры. details.issues перечисляет поля
409conflictСостояние не позволяет действие: цена изменилась, сервер уже удаляется, лимит
DELETE/api/v1/api-keys/{id}

Отозвать ключ

Ключ перестанет работать сразу. Можно отозвать и текущий ключ.

API-ключПраво: user:write

Параметры

ИмяТипОбязательноОписание
idpathstringдаId ключа

Запрос

curl -X DELETE 'https://gpu.nz/api/v1ak_3hT8Lw' \
  -H "Authorization: Bearer $GPUNZ_API_KEY"

Ошибки

СтатусКодЗначение
401unauthorizedНет ключа, ключ неверный, отозван или истёк
403forbiddenУ ключа нет нужного права или аккаунт заблокирован
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
404not_foundРесурс не найден или принадлежит другому пользователю

Вход из терминала

Device flow для gpunz login

POST/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
}

Ошибки

СтатусКодЗначение
422validation_errorНеверные параметры. details.issues перечисляет поля
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке
POST/api/v1/auth/device/token

Вход из терминала: получить ключ

CLI опрашивает эндпоинт раз в interval секунд, пока пользователь не подтвердит код в браузере. Ключ выдаётся один раз.

Открыт без ключа
  • Пока ждём подтверждения — 400 authorization_pending. Слишком частые запросы — 400 slow_down (увеличьте интервал).

Тело запроса

ИмяТипОбязательноОписание
device_codestringда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"
  }
}

Ошибки

СтатусКодЗначение
400authorization_pendingВход (device flow): ждём подтверждения в браузере
400slow_downВход (device flow): опрашиваете слишком часто
400access_deniedВход (device flow): отклонено в браузере
400expired_tokenВход (device flow): код истёк или уже использован
422validation_errorНеверные параметры. details.issues перечисляет поля
429rate_limitedСлишком много запросов. Заголовок Retry-After скажет, когда повторить
500internalВнутренняя ошибка. Повторите позже, request id поможет поддержке

Объекты

Поля, которые могут быть null, отмечены.

User

Профиль владельца ключа

ИмяТипОбязательноОписание
idstringдаВнутренний id пользователя
emailstringnullнетE-mail (null, если не подтверждён)
namestringдаИмя
created_atstringдаДата регистрации
two_factorbooleanнетВключена двухфакторная защита
email_verifiedbooleanнетE-mail подтверждён
telegram_linkedbooleanнетПривязан Telegram

Balance

Баланс в копейках. Расход в копейках в час

ИмяТипОбязательноОписание
balance_kopintegerнетБаланс: наличные + бонусы (копейки)
available_kopintegerнетДоступно сейчас, с учётом начисленного, но ещё не списанного
credit_limit_kopintegerнетКредитный лимит
burn_kop_hintegerнетРасход всех серверов, копеек в час
runway_hoursnumbernullнетЧасов хватит при текущем расходе (null, если расхода нет)
currency"RUB"нетВалюта

Transaction

Строка журнала операций кошелька

ИмяТипОбязательноОписание
idstringнетId операции
atstringнетВремя операции
type"topup" | "usage" | "bandwidth" | "refund" | "promo_grant" | "promo_expire" | "adjustment" | "writeoff" | "reversal"нетТип операции
amount_kopintegerнетИзменение баланса: плюс — зачисление, минус — списание
descriptionstringнетПонятное описание
instance_idstringnullнетСервер, если операция к нему относится

GpuModel

Модель видеокарты с текущим предложением

ИмяТипОбязательноОписание
slugstringнетИдентификатор модели для фильтра gpu=
namestringнетНазвание
vram_gbintegerнетПамять на одну карту, ГБ
tier"consumer" | "workstation" | "datacenter" | "legacy"нетКласс
available_gpusintegerнетСвободных GPU сейчас
from_kop_hintegernullнетМинимум за одну GPU, копеек в час (на аренду)
from_interruptible_kop_hintegernullнетМинимум за одну GPU для прерываемых серверов

Offer

Предложение: конфигурация сервера с ценой

ИмяТипОбязательноОписание
idstringдаId предложения (для POST /instances)
availablebooleanдаМожно арендовать сейчас
verifiedbooleanнетПроверенный дата-центр
countrystringnullнетСтрана, ISO-2
regionstringnullнетРегион
gpuobjectдаGPU
cpuobjectнетПроцессор
ram_gbintegernullнетОперативная память, ГБ
diskobjectнетДиск
networkobjectнетСеть
pcieobjectнетPCIe
cuda_maxnumbernullнетМаксимальная версия CUDA
driverstringnullнетВерсия драйвера
reliabilitynumbernullнетНадёжность, 0–1
max_duration_daysintegernullнетСколько дней ещё доступен контракт
dlperfnumbernullнетИндекс производительности для ML
priceobjectдаЦены за весь сервер (все GPU), копейки

Template

Шаблон: образ и режим запуска

ИмяТипОбязательноОписание
slugstringнетИдентификатор (для template=)
namestringнетНазвание
descriptionstringнетОписание
imagestringнетDocker-образ
launch_mode"ssh" | "jupyter" | "entrypoint"нетРежим запуска
portsarray<integer>нетПорты контейнера
envobjectнетПеременные окружения
onstartstringnullнетКоманда при старте
min_disk_gbintegerнетМинимум диска, ГБ
recommended_disk_gbintegerнетРекомендуемый диск, ГБ
publicbooleanнетВиден всем
owner"gpunz" | "me"нетgpunz — каталог, me — ваш шаблон

TemplateCreate

Свой шаблон

ИмяТипОбязательноОписание
namestringдаНазвание
descriptionstringнетОписание
imagestringдаDocker-образ с тегом
launch_mode"ssh" | "jupyter" | "entrypoint"нетРежим запуска (по умолчанию ssh)
portsarray<integer>нетПорты, которые будут опубликованы
envobjectнетПеременные окружения (до 30)
onstartstringнетКоманда при старте
min_disk_gbintegerнетМинимум диска
recommended_disk_gbintegerнетРекомендуемый диск

SshKey

Публичный SSH-ключ

ИмяТипОбязательноОписание
idstringнетId ключа
namestringнетНазвание
typestringнетТип ключа
fingerprintstringнетОтпечаток SHA256
created_atstringнетДобавлен

SshKeyCreate

Новый SSH-ключ

ИмяТипОбязательноОписание
namestringнетНазвание (необязательно)
public_keystringдаСтрока из файла .pub

Instance

Сервер (аренда)

ИмяТипОбязательноОписание
idstringдаId сервера
namestringnullнетНазвание
status"creating" | "starting" | "running" | "stopping" | "stopped" | "destroying" | "destroyed" | "failed" | "outbid"даТекущее состояние
desired_state"running" | "stopped" | "destroyed"нетК чему стремимся
type"on_demand" | "interruptible"даТип аренды
gpuobjectдаGPU
templateobjectнетШаблон
imagestringнетDocker-образ
disk_gbintegerнетДиск, ГБ
countrystringnullнетСтрана, ISO-2
priceobjectдаЦены, копейки в час
cost_so_far_kopintegerнетНачислено за всё время, копейки
sshobjectnullнетПодключение по SSH (null, пока порт не назначен)
urlsarray<object>нетВеб-интерфейсы шаблона
created_atstringнетСоздан
started_atstringnullнетПервый запуск
stop_reasonstringnullнетПричина остановки: user, low_balance, admin, provider

InstanceCreate

Параметры нового сервера

ИмяТипОбязательноОписание
offer_idstringдаId предложения из GET /offers
templatestringдаSlug шаблона
disk_gbintegerдаДиск, ГБ
namestringнетНазвание
ssh_key_idsarray<string>нетКлючи (по умолчанию все ваши)
type"on_demand" | "interruptible"нетТип (по умолчанию on_demand)
imagestringнетDocker-образ, только для шаблона custom
envobjectнетПока не поддерживается: передайте пустой объект или не передавайте
onstartstringнетПока не поддерживается: передайте null или не передавайте

InstancePatch

Изменение сервера

ИмяТипОбязательноОписание
namestringnullдаНовое название (null — убрать)

InstanceLogs

Последние строки журнала сервера

ИмяТипОбязательноОписание
linesarray<string>нетСтроки

ApiKey

API-ключ (без секрета)

ИмяТипОбязательноОписание
idstringнетId ключа
namestringнетНазвание
prefixstringнетНачало ключа для узнавания
scopesarray<"user:read" | "user:write" | "instances:read" | "instances:write" | "billing:read">нетПрава
source"console" | "cli" | "api"нетОткуда выдан
last_used_atstringnullнетПоследнее использование
created_atstringнетСоздан
expires_atstringnullнетИстекает (null — не истекает)

ApiKeyCreate

Новый ключ

ИмяТипОбязательноОписание
namestringдаНазвание
scopesarray<"user:read" | "user:write" | "instances:read" | "instances:write" | "billing:read">даПрава. Нельзя выдать больше, чем есть у ключа
expires_in_daysintegernullнетСрок в днях (null — бессрочно)

ApiKeyCreated

Новый ключ с секретом. Секрет показывается один раз

ИмяТипОбязательноОписание
idstringнетId ключа
secretstringнетСекрет gpz_… (сохраните сейчас)
namestringнетНазвание
prefixstringнетНачало ключа
scopesarray<string>нетПрава
sourcestringнетОткуда выдан
last_used_atstringnullнетПоследнее использование
created_atstringнетСоздан
expires_atstringnullнетИстекает

DeviceCode

Код для входа из терминала (gpunz login)

ИмяТипОбязательноОписание
device_codestringнетСекрет для CLI, не показывать
user_codestringнетКод, который вводят в браузере
verification_uristringнетСтраница подтверждения
verification_uri_completestringнетСтраница с заполненным кодом
expires_inintegerнетСрок жизни, секунд
intervalintegerнетМинимальный интервал опроса, секунд

DeviceTokenRequest

Запрос токена по device_code

ИмяТипОбязательноОписание
device_codestringдаdevice_code из POST /auth/device

DeviceToken

Выданный ключ (один раз)

ИмяТипОбязательноОписание
api_keystringнетСекрет gpz_…
key_idstringнетId ключа
userobjectнетВладелец