- Публичный 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 | Запуск скрипта на сервере |
Шаг 1. Выпустите ключ API
В панели откройте раздел «API» и нажмите «Выпустить ключ»; в боте @tihost_bot то же самое - «Профиль» - «API-ключ». Ключ начинается с tih_, действует бессрочно и показывается один раз: на сервере хранится только его хеш, поэтому сразу сохраните его в менеджер паролей или переменную окружения. У аккаунта один ключ; кнопка «Перевыпустить» мгновенно отключает старый.
Шаг 2. Проверьте ключ методом /ping
Сохраните ключ и базовый адрес в переменные окружения и вызовите /ping - он ничего не меняет и только подтверждает, что ключ рабочий. Вместо YOUR_API_KEY подставьте свой ключ:
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:
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 вернёт сохранённый ответ и не создаст вторую машину:
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}'{
"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}:
# все серверы аккаунта
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 секунд:
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 может меняться.
{
"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"
}
}| HTTP | code | Что значит |
|---|---|---|
| 400 | invalid_request | Запрос не прошёл проверку, причины - в details.fields |
| 401 | unauthorized, token_invalid | Нет заголовка Authorization или ключ отозван |
| 402 | insufficient_funds | Не хватает денег на балансе |
| 404 | not_found | Сервера нет или он принадлежит другому аккаунту |
| 409 | server_busy, rent_expired, conflict | Машина занята другой операцией, аренда истекла или действие невозможно в текущем состоянии |
| 422 | idempotency_key_reused | Тот же Idempotency-Key отправлен с другим запросом |
| 429 | rate_limited | Превышен лимит - повторите через Retry-After секунд |
- Лимит - 60 запросов в минуту на чтение и 10 в минуту на запись, на каждый ключ отдельно; окна независимы, поток чтения не блокирует управление.
- Каждый ответ несёт заголовки
X-RateLimit-Limit,X-RateLimit-RemainingиX-RateLimit-Reset, так что скрипт может притормозить до отказа. - Ключ повтора (
Idempotency-Key) - строка до 128 символов, обычно UUID; он живёт сутки, а ответ-повтор помечен заголовкомIdempotent-Replay: true. - Версия API - в адресе (
/v1): в её рамках поля могут добавляться, но не переименовываются и не удаляются. - Если ответ выглядит неправильно, напишите на [email protected] и приложите
request_id- по нему находится конкретный вызов.
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 работает с уже пополненным балансом.