# Timeweb Cloud API: Создать облачный сервер из скрипта

Сценарий из mcp-everything. Актуально на 2026-10-24.

Поднять сервер под проект, тест или клиента — с нужной ОС, тарифом и SSH-ключом.

1. Создай токен в панели управления (раздел «API и Terraform») и передавай его в заголовке Authorization: Bearer <токен>.
2. Выбери тариф и ОС: GET /api/v1/presets/servers (server_presets) и GET /api/v1/os/servers (servers_os).
3. Добавь свой SSH-ключ, если его ещё нет: POST /api/v1/ssh-keys с name, body и is_default. Список ключей — GET /api/v1/ssh-keys.
4. Создай сервер: POST /api/v1/servers с name, preset_id (или configuration — не оба), os_id, ssh_keys_ids и availability_zone. Ответ 201 с объектом server.
5. Сервер ещё может запускаться — проверяй status через GET /api/v1/servers/{server_id}, пока он не станет рабочим.

```bash
curl -X POST https://api.timeweb.cloud/api/v1/servers \
  -H "Authorization: Bearer $TIMEWEB_CLOUD_TOKEN" -H 'Content-Type: application/json' \
  -d '{
        "name": "web-1042",
        "preset_id": <ID тарифа>,
        "os_id": <ID ОС>,
        "ssh_keys_ids": [<ID ключа>],
        "availability_zone": "msk-1",
        "is_ddos_guard": false,
        "comment": "Сервер для клиента 1042"
      }'
```

## Базовые URL

- Боевой: `https://api.timeweb.cloud`

## Авторизация

Тип: Bearer-токен

JWT-токен создаётся в панели управления в разделе «API и Terraform» и передаётся в каждом запросе:

```
Authorization: Bearer $TIMEWEB_CLOUD_TOKEN
```

## Методы сценария

### POST /api/v1/servers — Создание сервера

Нужен `preset_id` или `configuration` (одно из двух). Ответ `201` с объектом `server`; сервер может ещё запускаться — смотрите `status`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `name` | body | string | да | Имя сервера, до 255 символов |
| `preset_id` | body | number | нет | ID тарифа (нельзя вместе с configuration) |
| `configuration.configurator_id` | body | number | нет | ID конфигуратора (обязателен внутри configuration) |
| `configuration.disk` | body | number | нет | Диск, МБ |
| `configuration.cpu` | body | number | нет | Число ядер |
| `configuration.ram` | body | number | нет | ОЗУ, МБ |
| `configuration.gpu` | body | number | нет | Число видеокарт |
| `os_id` | body | number | нет | ID ОС (нельзя вместе с image_id) |
| `image_id` | body | string | нет | ID образа |
| `software_id` | body | number | нет | ID ПО из маркетплейса |
| `bandwidth` | body | number | нет | Пропускная способность: 100–1000 с шагом 100 |
| `is_ddos_guard` | body | boolean | нет | Защищённый IP (L3/L4) |
| `ssh_keys_ids` | body | array | нет | SSH-ключи |
| `is_local_network` | body | boolean | нет | Локальная сеть |
| `network.id` | body | string | нет | ID приватной сети |
| `network.floating_ip` | body | string | нет | Публичный IP |
| `network.local_ip` | body | string | нет | Приватный IP |
| `cloud_init` | body | string | нет | Cloud-init скрипт |
| `availability_zone` | body | string | нет | spb-1…spb-4, msk-1, nsk-1, ams-1, ala-1, fra-1 |
| `project_id` | body | number | нет | ID проекта |
| `hostname` | body | string | нет | Сетевое имя |
| `comment` | body | string | нет | Комментарий, до 255 символов |

### GET /api/v1/servers/{server_id} — Получение сервера

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `server_id` | path | integer | да | ID сервера |

### GET /api/v1/presets/servers — Тарифы серверов

В ответе `server_presets`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `Authorization` | header | string | да | Bearer <токен> |

### GET /api/v1/os/servers — Операционные системы

В ответе `servers_os`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `Authorization` | header | string | да | Bearer <токен> |

### GET /api/v1/ssh-keys — Список SSH-ключей

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `Authorization` | header | string | да | Bearer <токен> |

### POST /api/v1/ssh-keys — Создание SSH-ключа

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `name` | body | string | да | Название |
| `body` | body | string | да | Тело ключа |
| `is_default` | body | boolean | да | Выбирать по умолчанию при создании сервера |

## Нюансы

- Тело `POST`, `PUT`, `PATCH` — `application/json`.
- Пагинация и поиск в коллекциях: `limit`, `offset`, `search`, `sort`.
- Ответы на `GET` содержат объект сущности по ключу, `meta.total` для коллекций и `response_id` (UUIDv4, приложите его в обращении в поддержку).
- Созданный ресурс может быть ещё «в состоянии запуска» — проверяйте поле `status`.
- Около 380 методов; кроме перечисленных — выделенные серверы, диски и бэкапы, образы, Kubernetes, балансировщики, VPC, плавающие IP, приложения, CDN, реестр контейнеров, ограничения доступа к аккаунту.

## Другие сценарии

- [Перезагрузить, выключить или изменить сервер](https://mcp-everything.ru/integrations/timeweb-cloud/scenarios/perezagruzit-vyklyuchit-ili-izmenit.md)
- [Добавить DNS-запись домена](https://mcp-everything.ru/integrations/timeweb-cloud/scenarios/dobavit-dns-zapis-domena.md)
- [Создать базу данных и S3-хранилище](https://mcp-everything.ru/integrations/timeweb-cloud/scenarios/sozdat-bazu-dannyh-i-s3-hranilische.md)

---

Если этого недостаточно — официальная документация: https://timeweb.cloud/api-docs
Вся интеграция одним документом: https://mcp-everything.ru/integrations/timeweb-cloud.md
