Все статьи
Платформа

API Tihost: как автоматизировать покупку и управление VPS

Коротко

API Tihost - это HTTP API с JSON по адресу https://api-public.tihost.io/v1: ключ выпускается в разделе «API» панели или в боте и передаётся в заголовке Authorization: Bearer. Через API можно купить сервер (POST /servers), продлить его, перезагрузить, переустановить ОС и сменить пароль; лимит - 60 запросов на чтение и 10 на запись в минуту на ключ.

Главное
  • Публичный API Tihost работает по адресу https://api-public.tihost.io/v1, принимает и отдаёт JSON, а ключ доступа передаётся в заголовке Authorization: Bearer <ключ>.
  • Ключ API Tihost выпускается в разделе «API» веб-панели кнопкой «Выпустить ключ» или в Telegram-боте через «Профиль» - «API-ключ»; значение показывается один раз.
  • Лимит API Tihost считается на ключ: 60 запросов в минуту на чтение и 10 в минуту на методы, которые меняют серверы или списывают деньги; при превышении приходит ответ 429 с заголовком Retry-After.
  • Покупка (POST /servers) и продление (POST /servers/{id}/renew) через API Tihost списывают деньги с баланса, поэтому их отправляют с заголовком Idempotency-Key - повтор с тем же ключом не купит второй сервер.

Полное описание каждого метода, всех полей ответа и кодов ошибок - на странице документации API. Здесь - быстрый путь от ключа до купленного и перезагруженного сервера.

Что можно делать через API Tihost

МетодПутьЧто делает
GET/pingПроверяет ключ, возвращает id аккаунта и время сервера
GET/balanceБаланс аккаунта в долларах
GET/catalog/plans?location=…Конфигурации в локации и цены за 1, 3, 6 и 12 месяцев
GET/catalog/os?location=…&plan_id=…Образы ОС для выбранной конфигурации
POST/serversПокупка сервера - списывает деньги
GET/serversСписок серверов аккаунта
GET/servers/{id}Один сервер: IP, состояние, ресурсы, цены продления
POST/servers/{id}/renewПродление на 2, 7, 30, 90, 180 или 365 дней - списывает деньги
PATCH/servers/{id}/auto-renewВключает или выключает автопродление
POST/servers/{id}/powerВключение, выключение, перезагрузка
PATCH/servers/{id}/nameСмена имени сервера
POST/servers/{id}/passwordСмена пароля root или Administrator
GET/servers/{id}/osОбразы, которые можно поставить на сервер
POST/servers/{id}/reinstallПереустановка ОС - стирает диск
GET/servers/{id}/scriptsСкрипты, доступные для ОС сервера
POST/servers/{id}/scripts/runЗапуск скрипта на сервере
Пути указаны относительно базы https://api-public.tihost.io/v1. Пополнить баланс и сменить IP-адрес через API нельзя - это делается в панели или боте.

Шаг 1. Выпустите ключ API

В панели откройте раздел «API» и нажмите «Выпустить ключ»; в боте @tihost_bot то же самое - «Профиль» - «API-ключ». Ключ начинается с tih_, действует бессрочно и показывается один раз: на сервере хранится только его хеш, поэтому сразу сохраните его в менеджер паролей или переменную окружения. У аккаунта один ключ; кнопка «Перевыпустить» мгновенно отключает старый.

Шаг 2. Проверьте ключ методом /ping

Сохраните ключ и базовый адрес в переменные окружения и вызовите /ping - он ничего не меняет и только подтверждает, что ключ рабочий. Вместо YOUR_API_KEY подставьте свой ключ:

bash
export TIHOST_TOKEN="YOUR_API_KEY"
export TIHOST_API="https://api-public.tihost.io/v1"

curl -H "Authorization: Bearer $TIHOST_TOKEN" "$TIHOST_API/ping"
Ответ
{
  "status": "ok",
  "account_id": 1042,
  "server_time": "2026-10-05T12:30:00Z"
}

Шаг 3. Узнайте баланс, тарифы и образы ОС

Перед покупкой нужны два идентификатора: plan_id конфигурации из /catalog/plans и os_id образа из /catalog/os. Числа 41 и 101 в примерах условные - берите их из ответа каталога, а не из статьи. Код локации - germany, finland или poland:

bash
curl -H "Authorization: Bearer $TIHOST_TOKEN" "$TIHOST_API/balance"
curl -H "Authorization: Bearer $TIHOST_TOKEN" "$TIHOST_API/catalog/plans?location=germany"
curl -H "Authorization: Bearer $TIHOST_TOKEN" "$TIHOST_API/catalog/os?location=germany&plan_id=41"

Каталог возвращает для каждой конфигурации cpu, ram_mb, disk_gb и массив periods с итоговой суммой за 1, 3, 6 и 12 месяцев - скидки 10, 15 и 20% там уже учтены.

Шаг 4. Купите сервер

Покупка - POST /servers с локацией, plan_id, os_id и сроком months (1, 3, 6 или 12); необязательное поле name задаёт имя сервера. Стоимость списывается с баланса, поэтому сгенерируйте Idempotency-Key один раз и при повторе после таймаута отправьте тот же ключ - API вернёт сохранённый ответ и не создаст вторую машину:

bash
IDEMPOTENCY_KEY=$(uuidgen)   # на Linux без uuidgen: cat /proc/sys/kernel/random/uuid

curl -X POST "$TIHOST_API/servers" \
  -H "Authorization: Bearer $TIHOST_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY" \
  -d '{"location": "germany", "plan_id": 41, "os_id": 101, "months": 1}'
Ответ 201
{
  "id": 2427,
  "name": "my-server-1",
  "os": "Ubuntu 24.04",
  "location": "germany",
  "login": "root",
  "password": "********",
  "rent_expires_at": "2026-11-04T10:00:00Z",
  "charged_usd": "4.00",
  "balance_usd": "6.00"
}

В ответе сразу есть login и password, а IP-адреса ещё нет: машина разворачивается примерно 2 минуты. IP и состояние читайте через GET /servers/{id}. Если денег не хватает, придёт ошибка 402 insufficient_funds с недостающей суммой в details.missing_usd.

Шаг 5. Управляйте серверами: список, перезагрузка, продление

Читающие методы (GET) безопасно вызывать в цикле, а пишущие (POST и PATCH) принимают тот же заголовок Idempotency-Key. Команды питания панель выполняет асинхронно: ответ power сообщает, в какое состояние переходит машина (running, stopped или restarting), а фактическое состояние видно в GET /servers/{id}:

bash
# все серверы аккаунта
curl -H "Authorization: Bearer $TIHOST_TOKEN" "$TIHOST_API/servers"

# один сервер: IP, состояние, ресурсы, цены продления
curl -H "Authorization: Bearer $TIHOST_TOKEN" "$TIHOST_API/servers/2427"

# перезагрузка (action: start, stop или restart)
curl -X POST "$TIHOST_API/servers/2427/power" \
  -H "Authorization: Bearer $TIHOST_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"action": "restart"}'

# продление на 30 дней с баланса
curl -X POST "$TIHOST_API/servers/2427/renew" \
  -H "Authorization: Bearer $TIHOST_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"days": 30}'

Пример на Python: купить сервер и дождаться IP

Скрипт на библиотеке requests (pip install requests) выбирает конфигурацию 1 vCPU / 2 ГБ в Германии, покупает её на месяц с Ubuntu и ждёт IP-адрес. Ключ берётся из переменной окружения TIHOST_TOKEN, ответ 429 обрабатывается паузой на Retry-After секунд:

buy_server.py
import os
import time
import uuid

import requests

BASE = "https://api-public.tihost.io/v1"
TOKEN = os.environ["TIHOST_TOKEN"]  # YOUR_API_KEY - из переменной окружения, не из кода


def api(method, path, body=None, idempotency_key=None):
    headers = {"Authorization": f"Bearer {TOKEN}"}
    if idempotency_key:
        headers["Idempotency-Key"] = idempotency_key
    while True:
        r = requests.request(method, BASE + path, headers=headers, json=body, timeout=30)
        if r.status_code == 429:  # лимит: ждём, сколько сказал сервер
            time.sleep(int(r.headers.get("Retry-After", "5")))
            continue
        if not r.ok:
            err = r.json()["error"]
            raise RuntimeError(f"{err['code']}: {err['message']} (request_id={err['request_id']})")
        return r.json()


# 1. Конфигурация 1 vCPU / 2 GB в Германии и Ubuntu для неё
plans = api("GET", "/catalog/plans?location=germany")["items"]
plan = next(p for p in plans if p["cpu"] == 1 and p["ram_mb"] == 2048)
images = api("GET", f"/catalog/os?location=germany&plan_id={plan['id']}")["items"]
os_id = next(i["id"] for i in images if i["name"].startswith("Ubuntu"))

# 2. Покупка на месяц. Ключ повтора - один на покупку: повтор не купит второй сервер
order = api(
    "POST",
    "/servers",
    body={"location": "germany", "plan_id": plan["id"], "os_id": os_id, "months": 1},
    idempotency_key=str(uuid.uuid4()),
)
print("login:", order["login"], "password:", order["password"])

# 3. Ждём IP-адрес (до 10 минут, опрос раз в 15 секунд)
for _ in range(40):
    server = api("GET", f"/servers/{order['id']}")
    if server["ip"]:
        print("ip:", server["ip"], "state:", server["state"])
        break
    time.sleep(15)

Ошибки и лимиты API Tihost

Любая ошибка приходит в одном формате - объекте error с полями code, message, request_id и иногда details. Ветвитесь по code: он стабильный, а текст message может меняться.

Ответ 429
{
  "error": {
    "code": "rate_limited",
    "message": "Rate limit exceeded: 60 read requests per 60 seconds",
    "details": { "limit": 60, "scope": "read", "retry_after": 27 },
    "request_id": "9f4c1d0e8b7a4c2f9e1d3b6a8c5f2e7d"
  }
}
HTTPcodeЧто значит
400invalid_requestЗапрос не прошёл проверку, причины - в details.fields
401unauthorized, token_invalidНет заголовка Authorization или ключ отозван
402insufficient_fundsНе хватает денег на балансе
404not_foundСервера нет или он принадлежит другому аккаунту
409server_busy, rent_expired, conflictМашина занята другой операцией, аренда истекла или действие невозможно в текущем состоянии
422idempotency_key_reusedТот же Idempotency-Key отправлен с другим запросом
429rate_limitedПревышен лимит - повторите через Retry-After секунд
Полный список кодов - на странице документации API.
  • Лимит - 60 запросов в минуту на чтение и 10 в минуту на запись, на каждый ключ отдельно; окна независимы, поток чтения не блокирует управление.
  • Каждый ответ несёт заголовки X-RateLimit-Limit, X-RateLimit-Remaining и X-RateLimit-Reset, так что скрипт может притормозить до отказа.
  • Ключ повтора (Idempotency-Key) - строка до 128 символов, обычно UUID; он живёт сутки, а ответ-повтор помечен заголовком Idempotent-Replay: true.
  • Версия API - в адресе (/v1): в её рамках поля могут добавляться, но не переименовываются и не удаляются.
  • Если ответ выглядит неправильно, напишите на [email protected] и приложите request_id - по нему находится конкретный вызов.
Запустите сервер за 2 минуты

AMD Ryzen 9, NVMe и защита от DDoS в Германии, Финляндии и Польше. Оплата криптовалютой или картой.

Заказать сервер

Частые вопросы

Где взять ключ API Tihost?

В веб-панели tihost.io: раздел «API» - кнопка «Выпустить ключ». В Telegram-боте @tihost_bot ключ выпускается через «Профиль» - «API-ключ». Значение показывается один раз, потом его можно только перевыпустить.

Можно ли купить VPS через API Tihost?

Да, методом POST /servers с полями location, plan_id, os_id и months; стоимость списывается с баланса аккаунта. Идентификаторы конфигурации и образа берутся из GET /catalog/plans и GET /catalog/os.

Как перезагрузить сервер через API Tihost?

Отправьте POST /servers/{id}/power с телом {"action": "restart"} и заголовком Authorization: Bearer. Значения start и stop включают и выключают сервер.

Какие лимиты у API Tihost?

60 запросов в минуту на чтение и 10 в минуту на методы, которые меняют серверы или списывают деньги, - на каждый ключ отдельно. При превышении приходит ответ 429 с кодом rate_limited и заголовком Retry-After.

Что будет, если повторить запрос на покупку после таймаута?

Если повтор отправлен с тем же заголовком Idempotency-Key, API Tihost вернёт сохранённый ответ первой покупки и не создаст второй сервер. Без этого заголовка повтор купит ещё одну машину.

Можно ли пополнить баланс или сменить IP через API Tihost?

Нет. Пополнение баланса и смена IP-адреса доступны только в веб-панели и Telegram-боте; API работает с уже пополненным балансом.